点击上方“匠心零度”,选择“设为星标”

做积极的人,而不是积极废人

作者:SimpleWu

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。

cd /usr/local/src/#下载sudo wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz#解压tar -zxvf zookeeper-3.4.14.tar.gz#修改配置文件名称mv conf/zoo_sample.cfg zoo.cfg#启动zk./bin/zkServer.sh start#出现以下字样代表启动成功,默认端口2181Starting zookeeper ... STARTED

SpringBoot2.x整合Dubbo

父工程搭建(pom工程)

<groupId>com.simple.springbootgroupId>    <artifactId>yun-doubleartifactId>    <version>0.0.1-SNAPSHOTversion><packaging>pompackaging><name>yun-doublename><description>doubledescription>

<properties>    <java.version>1.8java.version>    <double.version>2.0.0double.version>    <zkclient.version>0.10zkclient.version>properties>

<parent>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-starter-parentartifactId>        <version>2.1.4.RELEASEversion>        <relativePath/>parent>

<dependencyManagement>    <dependencies>        <dependency>            <groupId>com.alibaba.spring.bootgroupId>            <artifactId>dubbo-spring-boot-starterartifactId>            <version>${double.version}version>        dependency>        <dependency>            <groupId>com.101tecgroupId>            <artifactId>zkclientartifactId>            <version>${zkclient.version}version>        dependency>    dependencies>dependencyManagement>

创建公共接口工程common

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

<modelVersion>4.0.0modelVersion>

<parent>    <groupId>com.simple.springbootgroupId>    <artifactId>yun-doubleartifactId>    <version>0.0.1-SNAPSHOTversion>parent>

<groupId>com.simple.springbootgroupId><artifactId>commonartifactId><version>0.0.1-SNAPSHOTversion>

<name>commonname><description>公共接口description>

创建公共接口

public interface UserService {

    String getUserById(int id);

}

创建服务提供者(provider)

Pom文件

<modelVersion>4.0.0modelVersion>

<groupId>com.simple.springbootgroupId><artifactId>providerartifactId><version>0.0.1-SNAPSHOTversion><packaging>jarpackaging>

<name>providername><description>生产者description>

<parent>    <groupId>com.simple.springbootgroupId>    <artifactId>yun-doubleartifactId>    <version>0.0.1-SNAPSHOTversion>parent>

<dependencies>

    <dependency>        <groupId>com.alibaba.spring.bootgroupId>        <artifactId>dubbo-spring-boot-starterartifactId>    dependency>

    <dependency>        <groupId>com.101tecgroupId>        <artifactId>zkclientartifactId>

        <exclusions>            <exclusion>                <groupId>log4jgroupId>                <artifactId>log4jartifactId>            exclusion>

            <exclusion>                <groupId>org.slf4jgroupId>                <artifactId>slf4j-apiartifactId>            exclusion>

            <exclusion>                <groupId>org.slf4jgroupId>                <artifactId>slf4j-log4j12artifactId>            exclusion>        exclusions>    dependency>

    <dependency>        <groupId>com.simple.springbootgroupId>        <artifactId>commonartifactId>        <version>0.0.1-SNAPSHOTversion>    dependency>dependencies>

<build>    <plugins>        <plugin>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-maven-pluginartifactId>        plugin>    plugins>build>

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

application.properties配置文件

#dubbo.application.name 应用名称#dubbo.registry.address 注册中心地址#dubbo.protocol.name 协议名称#dubbo.protocol.port 协议端口#dubbo.scan dubbo 服务类包目录#server.port=8080spring.application.name=user-produbbo.application.name=user-provider1dubbo.registry.address=zookeeper://192.168.197.133:2181dubbo.protocol.name=dubbodubbo.protocol.port=20880

在这里dubbo.application.name应用名称一定不能重复

实现UserService

@Component@Service(timeout = 10000,interfaceClass = UserService.class)public class UserServiceImpl implements UserService {

    @Override    public String getUserById(int id) {        if(id == 1) {            return "SimpleWu";        }else {            return "Apache Dubbo";        }    }}

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

  • timeout 配置超时时间

  • interfaceClass 接口类

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

创建启动类

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

@EnableDubbo@EnableDubboConfiguration@DubboComponentScan("com.simple.springboot.provider.common.impl")public class ProviderApplication {

    public static void main(String[] args) {        SpringApplication app = new SpringApplication(ProviderApplication.class);        app.run(args);        //dubbo Main独立运行,脱离web容器        Main.main(args);    }

}
  • @EnableDubbo 启动Dubbo功能

  • @EnableDubboConfiguration 启动Duubbo配置

  • @DubboComponentScan 扫描提供者实现类

创建服务消费者(consumer)

POM文件

<modelVersion>4.0.0modelVersion>

<groupId>com.simple.springbootgroupId><artifactId>consumerartifactId><version>0.0.1-SNAPSHOTversion>

<name>consumername><description>消费者description>

<parent>    <groupId>com.simple.springbootgroupId>    <artifactId>yun-doubleartifactId>    <version>0.0.1-SNAPSHOTversion>parent>

<dependencies>    <dependency>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-starter-webartifactId>    dependency>

    <dependency>        <groupId>org.springframework.bootgroupId>        <artifactId>spring-boot-starter-testartifactId>    dependency>

    <dependency>        <groupId>com.alibaba.spring.bootgroupId>        <artifactId>dubbo-spring-boot-starterartifactId>    dependency>

    <dependency>        <groupId>com.101tecgroupId>        <artifactId>zkclientartifactId>

        <exclusions>            <exclusion>                <groupId>log4jgroupId>                <artifactId>log4jartifactId>            exclusion>

            <exclusion>                <groupId>org.slf4jgroupId>                <artifactId>slf4j-apiartifactId>            exclusion>

            <exclusion>                <groupId>org.slf4jgroupId>                <artifactId>slf4j-log4j12artifactId>            exclusion>        exclusions>    dependency>

    <dependency>        <groupId>com.simple.springbootgroupId>        <artifactId>commonartifactId>        <version>0.0.1-SNAPSHOTversion>    dependency>dependencies>

<build>    <plugins>        <plugin>            <groupId>org.springframework.bootgroupId>            <artifactId>spring-boot-maven-pluginartifactId>        plugin>    plugins>build>

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

编写Application.properties配置文件

spring.application.name=user-conserver.port=8080dubbo.application.name=user-consumerdubbo.registry.address=zookeeper://192.168.197.133:2181dubbo.protocol.name=dubbodubbo.protocol.port=20880#dubbo.scan=com.simple.springboot.provider.common.impl

在这里dubbo.application.name应用名称一定不能重复,dubbo.scan 该配置指向应该是要和服务提供方一致

编写Controller

@RestControllerpublic class UserController {

    //timeout 可以不指定,如果提供则有填写但是version一定要指定 不然会找不到服务 直连需要加url="dubbo://localhost:20880"    @Reference    private UserService userService;

    @GetMapping("/dubbo/user/{id}")    public String getUserById(@PathVariable int id){        return userService.getUserById(id);    }}

在这里是使用@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")这里表示使用失败安全的容错策略

编写启动类

/** * @author:SimpleWu * @date: 2019-05-08 */@EnableDubbo@SpringBootApplication@EnableDubboConfiguration@DubboComponentScan("com.simple.springboot.provider.common.impl")public class ConsumerApplication {    public static void main(String[] args) {        SpringApplication.run(ConsumerApplication.class,args);    }}

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

如果不想使用注解扫描可以使用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是导出不了文件而报错,至于文件下载也一样但是相信一般都会有单独的文件服务器。

END

如果读完觉得有收获的话,欢迎点【好看】,关注【匠心零度】,查阅更多精彩历史!!!

让我“好看” 

dubbo protocol port 消费者端_企业级 SpringBoot 与 Dubbo 的并用相关推荐

  1. dubbo protocol port 消费者端_springboot整合dubbo设置全局唯一ID进行日志追踪

    击上方蓝色"程序员白楠楠",选择"设为星标" 作者:松下听泉 出处:https://blog.csdn.net/weixin_39427718 1.新建项目 利 ...

  2. dubbo protocol port 消费者端_Dubbo源码:搞定URL,就走完了进度条的一半

    Dubbo 中的 URL 大家都知道,在互联网领域,每个信息资源都有统一的且在网上唯一的地址,该地址就叫 URL(Uniform Resource Locator,统一资源定位符),它是互联网的统一资 ...

  3. dubbo protocol port 消费者端_Dubbo 优雅停机演进之路

    一.前言 在 『ShutdownHook- Java 优雅停机解决方案』 一文中我们聊到了 Java 实现优雅停机原理.接下来我们就跟根据上面知识点,深入 Dubbo 内部,去了解一下 Dubbo 如 ...

  4. dubbo图形化界面搭建_使用 JMeter 进行 Dubbo 性能测试

    1 前言 说道性能测试工具,你会立刻联想到哪一个?ab(ApacheBench).JMeter.LoadRunner.wrk-可以说市面上的压测工具实在是五花八门.那如果再问一句,对 Dubbo 进行 ...

  5. application.properties引用其他文件_企业级SpringBoot应用多个子项目配置文件规划、多环境支持(一)...

    前言 我们在日常开发过程中,在新建一个项目中,我们经常会将一个项目按照功能性.模块等将一个项目分成多个子项目,这些子项目都包含在主项目中. 今天老顾就介绍企业应用中,分布式项目如何将配置分为开发环境. ...

  6. AndroidStudio_安卓原生开发_自己设计android端_到springboot端的请求验证Token系统---Android原生开发工作笔记158

    由于不希望自己的springboot后台接口,被暴露裸奔,就希望,加个验证,只有验证通过的请求, 才能访问,但,springboot的springsecurity自带的验证jwt的token,感觉比较 ...

  7. springboot整合dubbo之多注册中心配置(服务提供者和消费者均配置 2.7.0版本)

    一开始之前怎么配置都不能运行,会绕过远程连接的地址直接去链接127.0.0.1:2181这个地址,一直报错.再换回去单注册中心还是会一直多连一个莫须有的注册中心一直一直启动不开.类似于下面这样 ,因为 ...

  8. springboot dubbo 多模块项目dubbo提供者和消费者配置及代码

    注:本文只是介绍我成功使用springboot dubbo 多模块项目的配置及核心代码,若问题没得到解决或需要可运行的源码,文章末尾有说明. springboot集成dubbo过程坑太多,dubbo提 ...

  9. 5分钟实现SpringBoot整合Dubbo构建分布式服务

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:jaycekon cnblogs.com/jaycekon/ ...

最新文章

  1. Java项目:人事管理系统(java+javaweb+jdbc)
  2. tf.nn.relu
  3. Tensorflow mnist 数据集测试代码 + 自己下载数据
  4. 7月书讯:看风景的人
  5. # 从零開始搭建Hadoop2.7.1的分布式集群
  6. 【plt显示Tensor转出来的array时的报错】TypeError: Invalid dimensions for image data
  7. (chap4 IP协议) 路由控制( Routing)
  8. C#LeetCode刷题之#345-反转字符串中的元音字母​​​​​​​(Reverse Vowels of a String)
  9. pytorch —— Batch Normalization
  10. pyqt5 qwidget 边框_实战PyQt5: 116-画刷类QBrush
  11. 【数据库】第一章 数据库的分类、SQL、数据库、表和表记录的常用操作
  12. Oracle数据库常用操作sql语句
  13. C系新版凯立德推荐版本G1036
  14. 计算机课程教学质量分析,课程教学质量分析报告.PDF
  15. html实现连线插件,手动实现HTML插件Beautify
  16. UE5/C++ 基于GAS创建攻击伤害 5.1.1准备碰撞体
  17. python如何采集同花顺股票日度历史数据
  18. web前端优化10点总结
  19. ​PC电脑流行的主要原因
  20. 一张金融IC卡的交易流程(二)-----基本测试环境及借贷记交易流程(银联,交通部均为此流程)

热门文章

  1. 关于SDN的未来,Linux基金会专访阿里云网络大神
  2. 为什么深度学习没有取代传统的计算机视觉?
  3. 用WEB技术栈开发NATIVE应用:WEEX SDK原理详解
  4. 百度研究院发布2022科技趋势预测:大模型实用化、AI助力深空探测成热门
  5. 想在边缘运行计算机视觉程序?先来迎接挑战!
  6. 超详细 | 21张图带你领略集合的线程不安全
  7. 我画了35张图,就是为了让你深入 AQS!
  8. 不少人暗搓搓的准备春招了,我有一些好东东和招聘信息给你
  9. 突发!Python再次卫冕,Java和C下降,你怎么看?
  10. Spark精华问答 | Spark的计算方法是什么?