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
如不能访问网址,可看下图,如图所示:
tip: 如果不能访问官网,且想复制图中代码;复制图片==>打开微信==>打开图片(也可能需要发送) ==> 打开图片,复制即可
a. pom 添加依赖:
a.1 : 如果是dubbo3 则引用如下jar包
<dependency><groupId>org.apache.dubbo.extensions</groupId><artifactId>dubbo-cluster-specify-address-dubbo3</artifactId><version>1.0.0</version>
</dependency>
dubbo2:
<dependency><groupId>org.apache.dubbo.extensions</groupId><artifactId>dubbo-cluster-specify-address-dubbo2</artifactId><version>1.0.0</version>
</dependency>
b. 代码:
# 调用配置类 <> 内写入接口类
ReferenceConfig<你的调用类> referenceConfig = new ReferenceConfig<Demo>();
# 可以配置 调用失败的重试次数
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 端口 ,比较简单,通过@Value注解 获取生产者dubbo端口
如果是随机端口,启动之后,dubbo有没有方法可以获取到随机端口号,或者通过代码从nacos获取随机的端口号,欢迎沟通,讨论下这个问题