dubbo 动态指定 IP 调用

本文介绍了如何在SpringBoot应用中使用Dubbo3.2.3与Nacos0.2.1集成,重点讲解了如何通过Nacos配置动态指定服务的IP地址,以及在消费者端处理不同版本兼容的问题。
摘要由CSDN通过智能技术生成

dubbo官方文档

https://cn.dubbo.apache.org/zh-cn/overview/mannual/java-sdk/advanced-features-and-usage/service/specify-ip/

环境 :    springboot  2.7.18    +   nacos 0.2.1   +   dubbo 3.2.3

0 .部分核心依赖 (版本需保持一致)

<java.version>1.8</java.version>
<dubbo.version>3.2.3</dubbo.version>
<dubbo-extensions-specify.version>1.0.0</dubbo-extensions-specify.version>
<nacos-config.version>0.2.1</nacos-config.version>
<org.apache.commons.version>3.12.0</org.apache.commons.version>
<spring.context.support.version>1.0.11</spring.context.support.version>





             <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <!--dubbo 插件依赖 动态指定 IP-->
            <dependency>
                <groupId>org.apache.dubbo.extensions</groupId>
                <artifactId>dubbo-cluster-specify-address-dubbo3</artifactId>
                <version>${dubbo-extensions-specify.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-rpc-triple</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba.spring</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.context.support.version}</version>
            </dependency>


            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>nacos-config-spring-boot-starter</artifactId>
                <version>${nacos-config.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.spring</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${com.alibaba.spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>${org.apache.commons.version}</version>
            </dependency>








         <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-rpc-triple</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.spring</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>



        <!--dubbo 插件依赖 动态指定 IP-->
        <dependency>
            <groupId>org.apache.dubbo.extensions</groupId>
            <artifactId>dubbo-cluster-specify-address-dubbo3</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.dubbo</groupId>
                    <artifactId>dubbo</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <!--集成Nacos实现动态配置管理-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>

1.取nacos配置

启动类添加注解 

@NacosPropertySource(dataId = "example", autoRefreshed = true)

nacos添加配置

2.消费者测试调用法


@Service
public class TestService {

    @DubboReference(version = "1.0.1")
    StudentService studentService; 

    @NacosValue(value = "${testPort}", autoRefreshed = true)
    private int testPort;

    @NacosValue(value = "${testV}", autoRefreshed = true)
    private String testV;

    public void dubboTest() {

        try {
            System.out.println(" testPort is : " + testPort);
            ReferenceConfig<StudentService> referenceConfig = new ReferenceConfig<>();
            referenceConfig.setInterface(StudentService.class);
            referenceConfig.setVersion(testV);// 官方文档没有这行 我的环境不指定版本会报错 贴下面

            StudentService demoService = referenceConfig.get();
            UserSpecifiedAddressUtil.setAddress(new Address("192.168.10.231", testPort, true));
            demoService.sayHello("world");



        }catch (Exception e){
            e.printStackTrace();
        }




}

3. 不指定版本报的错

java.lang.IllegalStateException: Failed to check the status of the service com.dmx.api.account.service.StudentService. No provider available for the service com.dmx.api.account.service.StudentService from the url consumer://192.168.10.231/com.dmx.api.account.service.StudentService?application=fishgame&background=false&dubbo=2.0.2&executor-management-mode=isolation&file-cache=true&interface=com.dmx.api.account.service.StudentService&methods=count,getById,getHelloCfgList,getHelloCfgSize,sayHello&pid=1744&qos.enable=true&register.ip=192.168.10.231&release=3.2.3&side=consumer&sticky=false&timestamp=1708606192694&unloadClusterRelated=false to the consumer 192.168.10.231 use dubbo version 3.2.3
	at org.apache.dubbo.config.ReferenceConfig.checkInvokerAvailable(ReferenceConfig.java:694)
	at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:358)
	at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:233)
	at org.apache.dubbo.config.ReferenceConfigBase.get(ReferenceConfigBase.java:378)
	at com.dmx.TestService.dubboTest(TestService.java:37)

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值