Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip

1. 在写分布式im时nami-im: 分布式im, 集群 zookeeper netty kafka nacos rpc主要为gate(长连接服务) logic (业务) lsb (负载均衡)store(存储) - Gitee.com,需要指定某一长连接服务调用,其他博客得都调不通,写的有问题。要不就是通过xml进行配置,本文主要是以代码形式,调用前 配置ip, port 进行rpc方法调用,方便后来者使用

2. dubbo官网的指定调用代码示例:

动态指定 IP 调用 | Apache Dubbo

如不能访问网址,可看下图,如图所示:

Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip_第1张图片

 

Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip_第2张图片

 Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip_第3张图片

   tip: 如果不能访问官网,且想复制图中代码;复制图片==>打开微信==>打开图片(也可能需要发送) ==> 打开图片,复制即可

a. pom 添加依赖

    a.1 : 如果是dubbo3  则引用如下jar包


  org.apache.dubbo.extensions
  dubbo-cluster-specify-address-dubbo3
  1.0.0

   dubbo2:


  org.apache.dubbo.extensions
  dubbo-cluster-specify-address-dubbo2
  1.0.0

b. 代码

# 调用配置类 <> 内写入接口类
ReferenceConfig<你的调用类> referenceConfig = new ReferenceConfig();
# 可以配置 调用失败的重试次数
referenceConfig.setRetries(2);

# 官方没有,但是我测试的时候,如果不配置一遍, 会出错
referenceConfig.setInterface(Demo.class)
# 等等其他配置
#....

referenceConfig.setInterface(Demo.class);
Demo demo = referenceConfig.get();

// 写入ip, dubbo端口号
UserSpecifiedAddressUtil.setAddress(new Address(ip, port, true));
# 调用方法,并传参
demo.test(param);

c . 图中一个问题是ip, port 怎么获取

     c1.查看dubbo源码拿到获取ip方法:

                                  NetUtils.getLocalHost() 

        上述是dubbo 的源码方法即获取ip,只要使用dubbo ,直接调用就能调用出来,注意这个是dubbo的源码方法,引用包结构别错了

      c2.端口的话会出现两种情况:

                                                  1. 配置文件是随机端口

                                                  2.是固定dubbo protocol port

            如果是随机端口,则可能需要从nacos配置中心,写代码获取

                Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip_第4张图片

 

           我选用了固定dubbo 端口 ,比较简单,通过@Value注解 获取生产者dubbo端口

Dubbo 指定调用固定ip+port dubbo调用指定服务 dubbo调用不随机 dubbo自定义调用服务 dubbo点对点通信 dubbo指定ip_第5张图片

 

           如果是随机端口,启动之后,dubbo有没有方法可以获取到随机端口号,或者通过代码从nacos获取随机的端口号,欢迎沟通,讨论下这个问题

你可能感兴趣的:(dubbo)