ITPub博客

首页 > 应用开发 > > 企业级 SpringBoot 与 Dubbo 的并用

企业级 SpringBoot 与 Dubbo 的并用

作者:jasonhsp 时间:2019-11-25 10:12:32 0 删除 编辑

作者:SimpleWu

https://www.cnblogs.com/SimpleWu/p/10833555.html

SpringBoot 和 Dubbo 又能碰撞出什么火花呢?我们来看看企业级 SpringBoot 与 Dubbo 的并用。

版本:

Springboot2.x

Double2.6

Zk3.4.14

JDK8

这里就不介绍Dubbo了,不了解的可以看这里:

https://www.cnblogs.com/SimpleWu/p/9769797.html

zookeepr安装

下载去官网查找稳定的版本进行使用:

http://www.apache.org/dyn/closer.cgi/zookeeper/

先在服务器上安装zookeeper。

SpringBoot2.x整合Dubbo

父工程搭建(pom工程)

创建公共接口工程common

该工程用于存储服务层接口,以减少代码的冗余。

4.0.0

com.simple.springboot

yun-double

0.0.1-SNAPSHOT

com.simple.springboot

common

0.0.1-SNAPSHOT

common

公共接口

创建公共接口

public interface UserService {

String getUserById(int id);

}

创建服务提供者(provider)

Pom文件

4.0.0

com.simple.springboot

provider

0.0.1-SNAPSHOT

jar

provider

生产者

com.simple.springboot

yun-double

0.0.1-SNAPSHOT

com.alibaba.spring.boot

dubbo-spring-boot-starter

com.101tec

zkclient

log4j

log4j

org.slf4j

slf4j-api

org.slf4j

slf4j-log4j12

com.simple.springboot

common

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-maven-plugin

在pom文件中我们需要引入Dubbo,Zk客户端并且引入公共接口工程

application.properties配置文件

@Service 这个注解使用的不是Spring里面的,而是com.alibaba.dubbo.config.annotation.Service

timeout 配置超时时间

interfaceClass 接口类

version 服务版本,如果配置了服务版本在消费端引用也必须一样,具体等会说

创建启动类

在该工程中我们不需要引入Web模块浪费端口号,只需要这样写启动类

@EnableDubbo 启动Dubbo功能

@EnableDubboConfiguration 启动Duubbo配置

@DubboComponentScan 扫描提供者实现类

创建服务消费者(consumer)

POM文件

4.0.0

com.simple.springboot

consumer

0.0.1-SNAPSHOT

consumer

消费者

com.simple.springboot

yun-double

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

com.alibaba.spring.boot

dubbo-spring-boot-starter

com.101tec

zkclient

log4j

log4j

org.slf4j

slf4j-api

org.slf4j

slf4j-log4j12

com.simple.springboot

common

0.0.1-SNAPSHOT

org.springframework.boot

spring-boot-maven-plugin

在这个工程中我们是需要依赖Web的,不然咋访问呢

编写Application.properties配置文件

在这里是使用@Reference去发现服务而不是@Autowired去注入Bean,@Reference 里面可以配置version,timeout超时时间

如果需要Dubbo直连url="dubbo://localhost:20880"

dubbo提供了四种负载均衡策略,分别是:

1、Random LoadBalance 按权重的随机负载均衡,也是dubbo默认的负载均衡策略

2、RoundRobin LoadBalance 按权重的轮询负载均衡,即在轮询的基础上添加了权重的策略

3、LeastActive LoadBalance 最少活跃调用数,相同活跃数的随机访问,活跃数指调用前后的计数差即响应时间的长短;这种策略可以使响应慢的提供者收到的请求较少,大大提供系统性能

4、ConsistentHash LoadBalance 一致性哈希;相同参数的请求总是发到同一提供者

负载均衡的配置:@Reference(loadbalance = "roundrobin"),loadbalance 的值即为四种负载均衡的名称,全部小写

在集群调用失败时,Dubbo 提供了多种容错方案,缺省为 failover 重试。下面列举dubbo支持的容错策略:

1、Failover Cluster:失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="XXX" 来设置重试次数(不含第一次)。

2、Failfast Cluster:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。

3、Failsafe Cluster:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

4、Failback Cluster:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

5、Forking Cluster:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。

6、Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。

配置如下:@Reference(cluster = "failsafe")这里表示使用失败安全的容错策略

编写启动类

然后直接就可以访问成功了。

如果不想使用注解扫描可以使用properties进行配置

#dubbo.scan=com.simple.springboot.provider.common.impl

参考代码:

https://gitlab.com/450255266/code/tree/master/SpringBoot/dubbo/yun-double

注意事项:

Dubbo是一个二进制的Rpc框架在传输数据过程中,实体类必须经过序列化。

在使用poi导出功能时一定不能把response传到Service层,否则传输到Service是导出不了文件而报错,至于文件下载也一样但是相信一般都会有单独的文件服务器。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/615/viewspace-3129240/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: C语言的高级用法
请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    342
  • 访问量
    2731