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官网也可以下载源码进行打包 这里就不说了

 

posted @   沙漠里的橘子皮  阅读(254)  评论(0编辑  收藏  举报
编辑推荐:
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!
点击右上角即可分享
微信分享提示