springboot结合dubbo使用

springboot结合dubbo使用

dubbo结合spring需要在配置文件中配置,结合springboot时就可以使用application.yml配置文件或者application.properties。个人更喜欢结合springboot的使用。
不说那么多了,从代码中得到的才是最深沉的。
创建一个maven项目

创建一个springboot提供者的module

step0:创建好后pom.xml中引入jar包依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--web项目-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--dubbo ali apache-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.7.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.itzz</groupId>
            <artifactId>dubbo02-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

step1把application.properties文件的后缀改为.yml后缀,配置文件中的配置

dubbo:
  application:
    name: dubbo02-provider
  registry:
    address: zookeeper://localhost:2181
  protocol:
    port: 20880
    name: dubbo
  scan:
    base-packages: com.itzz.provider.service.Impl
#自定义当前应用版本号
application:
  version: 1.0.0
#修改web项目启动默认的端口号
server:
  port: 8081

创建相关的包结构,然后再service的Impl包中创建相关的功能


import com.itzz.provider.service.UserService;
import org.apache.dubbo.config.annotation.Service;

@Service(version = "${application.version}")
public class UserServiceImpl implements UserService {
    @Override
    public String getName(int id) {
        System.out.println("------1------");
        if (id == 1){
            return "张三";
        }else if (id == 2){
            return "李四";
        }
        return "傻蛋";
    }
}

@Service(version = “${application.version}”)中引用配置文件中的版本号,假如以后版本升级了,总不能一个一个的更改吧,所以加入相关的注解。我的包结构如下所示:
在这里插入图片描述

创建一个api的module(maven结构的module)

在api的module中创建跟提供者的module一样的包结构


public interface UserService {
    public String getName(int id);
}

包结构
在这里插入图片描述

创建一个消费者的spring boot的module

step0:pom.xml的jar包

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.7.0</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.itzz</groupId>
            <artifactId>dubbo02-api</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

一定要引入api的依赖,不然会报错,说找不到UserService接口
step1:springboot自动生成的配置文件后缀还是改成.yml后缀。跟之前结合spring的时候用的配置信息一样。

dubbo:
  application:
    name: dubbo02-consumer
  registry:
    address: zookeeper://localhost:2181
  scan:
    base-packages: com.itzz.provider.service.Impl
  #自定义当前应用版本号
application:
  version: 1.0.0
  #修改web项目启动默认的端口号
server:
  port: 8082

step2:创建web层,web直接调用接口中定义的方法。

import com.itzz.provider.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Reference(version = "${application.version}")
    private UserService userService;
    @RequestMapping("getName")
    public String getName(Integer id){
        return userService.getName(id);
    }
}

包结构如下:
在这里插入图片描述
到这里项目就敲完了,先启动提供者的主类,然后再启动消费者的主类剩下的就是在管理中心里进行测试了。

在控制中心测试

在网页中输入http://localhost:7001/进入到管理中心(当然前提是你的管理中心启了着的)。再加一个提供者跟上面的功能一样,做一个提供者集群。

然后看两个是否都已经注册到了监控中心中了

通过消费者的端口在网页的url中访问,如下所示:在这里插入图片描述

权重

权重:我在第二个提供的实现类上配置了权重为300,所以访问的几率就会比第一个提供者的次数多。
在这里插入图片描述
禁用就是禁止使用,不再用这个提供者了。
在这里插入图片描述
服务中心中显示的

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

负载均衡策略

dubbo的负载均衡策略是随机访问的。因为dubbo默认的负载均衡策略就是随机的,除了随机还有轮询(两个提供者挨着来)、并发最小(好比排队哪里人少去哪里)。

随机策略

权重都一样时才会随机
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

轮询策略

在这里插入图片描述

访问提供者的次数是一样多的。
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值