spring boot集成dubbo

dubbo需要额外的注册中心,其实也可以配置直连,但是那也没有意义了,支持几种注册中心但是推荐还是zookeeper 

这里就不说怎么搭建zookeeper了,去官网下载一个 然后在conf目录下新建zoo.cfg文件 至于内容可以复制zoo_sample.cfg 只需要修改一下里面数据存储的目录即可

启动zookeeper,进入bin目录下如果是Windows执行zkServer.cmd,liunx就是zkServer.sh 这是启动zookeeper服务,至于客户端可以用zkCli.sh或cmd

dubbo就是把所有的接口(服务)采用统一声明管理,建一个工程,里面创建别的模块所需要的service接口和相关的实体类

命名为dubbo-api 然后在别的模块中引入这个工程

maven依赖如下

 1         <dependency>
 2             <groupId>com.tqq</groupId>
 3             <artifactId>dubbo-api</artifactId>
 4             <version>1.0-SNAPSHOT</version>
 5         </dependency>
 6         <!-- Dubbo Spring Boot Starter -->
 7         <dependency>
 8             <groupId>org.apache.dubbo</groupId>
 9             <artifactId>dubbo-spring-boot-starter</artifactId>
10             <version>2.7.5</version>
11         </dependency>
12         <!-- zookeeper client依赖 -->
13         <dependency>
14             <groupId>com.101tec</groupId>
15             <artifactId>zkclient</artifactId>
16             <version>0.10</version>
17         </dependency>
18         <dependency>
19             <groupId>org.apache.curator</groupId>
20             <artifactId>curator-recipes</artifactId>
21             <version>2.13.0</version>
22         </dependency>

dubbo集成spring boot其实都有两种,因为现在最新的dubbo都捐赠给了Apache,而之前是属于alibaba的一个项目

我这里用得是最新的Apache的dubbo,不过两种其实一样,只不过Apache版本的包名已经不同了并且也包括了alibaba版本的 只不过会显示已过时

接下来就是application.propperties的配置,都是dubbo必须的配置

dubbo.application.name=order-service  #应用名
dubbo.registry.address=127.0.0.1:2181 #注册中心地址
dubbo.registry.protocol=zookeeper     #注册中心类型
dubbo.protocol.name=dubbo             #服务间调用协议 支持多种协议
dubbo.protocol.port=20882             #服务间调用端口

接下来就是常规操作 在启动类上加一个

@EnableDubbo(scanBasePackages = "包路径") 开启dubbo支持 并扫描指定包下的接口

到这里 基本的dubbo工程已经搭建好了 接下来就是怎么暴露一个接口(服务)给其他应用使用
import org.apache.dubbo.config.annotation.Service;

import java.util.Arrays;
import java.util.List;

/**
 * @Description: TODO
 * @Author: Tan
 * @CreateDate: 2020/3/18
 **/
@Service
public class UserServiceImpl implements UserService {
    @Override
    public List<UserAddress> queryUserAddressByUserId(String userId) {
        UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
        UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");

        return Arrays.asList(address1,address2);
    }
}

这是一个接口的实现类,至于这个接口是定义在上面的dubbo-api项目中,返回的实体类也是

将这个接口暴露出去,给别的应用调用,只需要加上一个@Service注解即可,注意这个注解是

org.apache.dubbo.config.annotation.Service; 而不是Spring的@Service注解

接口暴露出来,我想在别的模块要怎么引用呢?

package com.tqq.service;

import com.tqq.entity.UserAddress;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Description: TODO
 * @Author: Tan
 * @CreateDate: 2020/3/18
 **/
@Service
public class OrderServiceImpl  implements OrderService {

    @Reference()
    UserService userService;

    @Override
    public List<UserAddress> queryUserAddressByUserId(String userId) {
        return userService.queryUserAddressByUserId(userId);
    }
}

这里同样是一个接口实现类,接口也定义在dubbo-api项目,

这里我这个接口不对外暴露所以我这里使用得是Spring的@Service注解

而不是dubbo的,我在这个里面需要调用我刚刚暴露的这个,只需要像常规

使用交由Spring管理的对象一样 直接注入进来即可 但是要使用

@Reference注解,这个注解可以定义一些功能比如调用的超时时间,重试次数等

关于dubbo的详细配置 可以参考dubbo官网,只要是xml能配置的在这个注解里面都能配
或者在application.propperties配置文件里面配置

基本上的配置就是这样 接下来就是关于dubbo的一些 服务降级 熔断 负载均衡的配置
这里要使用一个dubbo-admin 是官方提供的一个web管理界面,方便我们查看服务,操作服务等
这个去dubbo官网也可以下载源码进行打包 这里就不说了

 

原文地址:https://www.cnblogs.com/java888/p/12519380.html