• 09_SpingBoot 集成Dubbo


     阿里巴巴提供了dubbo集成springBoot开源项目,可以到GitHub上GitHub - alibaba/dubbo-spring-boot-starter: Dubbo Spring Boot Starter查看入门教程

     创建新的数据库springboot,指定数据库字符编码为utf-8

    1. SET NAMES utf8mb4;
    2. SET FOREIGN_KEY_CHECKS = 0;
    3. -- ----------------------------
    4. -- Table structure for t_student
    5. -- ----------------------------
    6. DROP TABLE IF EXISTS `t_student`;
    7. CREATE TABLE `t_student` (
    8. `id` int NOT NULL AUTO_INCREMENT,
    9. `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
    10. `age` int NULL DEFAULT NULL,
    11. PRIMARY KEY (`id`) USING BTREE
    12. ) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;
    13. -- ----------------------------
    14. -- Records of t_student
    15. -- ----------------------------
    16. INSERT INTO `t_student` VALUES (1, 'zhangsan', 25);
    17. INSERT INTO `t_student` VALUES (2, 'lisi', 28);
    18. INSERT INTO `t_student` VALUES (3, 'wangwu', 23);
    19. INSERT INTO `t_student` VALUES (4, 'Tom', 21);
    20. INSERT INTO `t_student` VALUES (5, 'Jck', 55);
    21. INSERT INTO `t_student` VALUES (6, 'Lucy', 27);
    22. INSERT INTO `t_student` VALUES (7, 'zhaoliu', 75);
    23. SET FOREIGN_KEY_CHECKS = 1;

    一、Spring Boot + Dubbo(Zookeeper)集成

    1. 开发Dubbo服务接口-公共接口

    按照Dubbo官方开发建议,创建一个接口项目,该项目只定义接口和model类

    项目名称:006-springboot-dubbo-exterface

    A. 创建普通Maven项目,dubbo服务接口工程

    B. 创建UserService接口

    1. public interface UserService {
    2. String say(String name);
    3. }

    2. 开发Dubbo服务提供者

    项目名称:007-springboot-dubbo-provider

    A. 创建 SpringBoot Web项目

    B.加入springboot与dubbo集成的起步依赖

    1. <!--Spring Boot集成Dubbo的起步依赖-->
    2. <dependency>
    3. <groupId>com.alibaba.spring.boot</groupId>
    4. <artifactId>dubbo-spring-boot-starter</artifactId>
    5. <version>2.0.0</version>
    6. </dependency>

    C. 由于使用zookeeper作为注册中心,需加入zookeeper的客户端依赖

    1. <!--ZooKeeper注册中心依赖-->
    2. <dependency>
    3. <groupId>com.101tec</groupId>
    4. <artifactId>zkclient</artifactId>
    5. <version>0.10</version>
    6. </dependency>

    D. 加入006-springboot-dubbo-exterface接口依赖

    1. <!--Dubbo接口工程依赖-->
    2. <dependency>
    3. <groupId>com.suke.springboot</groupId>
    4. <artifactId>006-springboot-dubbo-exterface</artifactId>
    5. <version>1.0-SNAPSHOT</version>
    6. </dependency>

    E. 在Springboot的核心配置文件application.properties中配置dubbo的信息

    注意:Dubbo的注解都是自定义的注解,由我们添加的Dubbo依赖中的类进行处理

               编写dubbo配置是没有提示的

    1. #配置内嵌Tomcat端口号
    2. server.port=9007
    3. #配置项目上下文根
    4. server.servlet.context-path=/007-springboot-dubbo-provider
    5. #配置Dubbo服务提供者配置
    6. #服务提供者应用名称必须写,且不能重复
    7. spring.application.name=007-springboot-dubbo-provider
    8. #表示是服务提供者,可以省略
    9. spring.dubbo.server=true
    10. #注册中心地址
    11. spring.dubbo.registry=zookeeper://192.168.60.130:2181

    F. 编写Dubbo的接口实现类

    • @Service是由阿里提供的注解,不是spring的注册
    • @Service相当于 <dubbo:service interface="" ref="" version="" timeout=""/>
    • 如果提供者指定version,那么消费者也得指定version
    • timeout = 20000: 20秒内没连上自动放弃结束
    • retries = 3: 额外三次连接机会
    • version = "1.0.0": 对以后服务版本的升级进行区分
    1. /*
    2. * @Service是由阿里提供的注解,不是spring的注册
    3. * @Service相当于 <dubbo:service interface="" ref="" version="" timeout=""/>
    4. * 如果提供者指定version,那么消费者也得指定version
    5. * timeout = 20000: 20秒内没连上自动放弃结束
    6. * retries = 3: 额外三次连接机会
    7. * version = "1.0.0": 对以后服务版本的升级进行区分
    8. * */
    9. @Service(interfaceClass = UserService.class, timeout = 20000, retries = 3, version = "1.0.0")
    10. @Component //将接口实现类交给spring容器进行管理
    11. public class UserServiceImpl implements UserService {
    12. @Override
    13. public String say(String name) {
    14. return "Hello SpringBoot!";
    15. }
    16. }

    G. ​​​​​​​在SpringBoot入口程序类上加开启Dubbo配置支持注解

    1. @SpringBootApplication
    2. @EnableDubboConfiguration//开启Dubbo配置支持
    3. public class Application {
    4. public static void main(String[] args) {
    5. SpringApplication.run(Application.class, args);
    6. }
    7. }

    H. 启动Zookeeper服务

    (1)启动Linux服务器上的Zookeeper

    Zookeeper启动https://blog.csdn.net/qq_45037155/article/details/124959703

     ./zkServer.sh start

    1. [root@Suke ~]# cd /usr/local/apache-zookeeper-3.5.5-bin/bin/
    2. [root@Suke bin]# ./zkServer.sh help
    3. ZooKeeper JMX enabled by default
    4. Using config: /usr/local/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
    5. Usage: ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|restart|status|print-cmd}
    6. [root@Suke bin]# ./zkServer.sh start
    7. ZooKeeper JMX enabled by default
    8. Using config: /usr/local/apache-zookeeper-3.5.5-bin/bin/../conf/zoo.cfg
    9. Starting zookeeper ... STARTED

    (2)启动服务提供者项目主程序

    3. 开发Dubbo服务消费者

    项目名称:008-springboot-dubbo-consumer

    A. 创建SpringBoot Web项目

    ​​​​​​​B. 加入springboot与dubbo集成的起步依赖

    1. <!--Spring Boot集成Dubbo的起步依赖-->
    2. <dependency>
    3. <groupId>com.alibaba.spring.boot</groupId>
    4. <artifactId>dubbo-spring-boot-starter</artifactId>
    5. <version>2.0.0</version>
    6. </dependency>

    C. ​​​​​​​由于使用zookeeper作为注册中心,需加入zookeeper的客户端依赖

    1. <!--ZooKeeper注册中心依赖-->
    2. <dependency>
    3. <groupId>com.101tec</groupId>
    4. <artifactId>zkclient</artifactId>
    5. <version>0.10</version>
    6. </dependency>

    D. ​​​​​​​加入006-springboot-dubbo-exterface接口依赖

    1. <!--Dubbo接口工程依赖-->
    2. <dependency>
    3. <groupId>com.suke.springboot</groupId>
    4. <artifactId>006-springboot-dubbo-exterface</artifactId>
    5. <version>1.0-SNAPSHOT</version>
    6. </dependency>

    E. ​​​​​​​在Springboot的核心配置文件application.properties中配置dubbo的信息

    1. server.port=9008
    2. server.servlet.context-path=/008-springboot-dubbo-consumer
    3. #配置dubbo服务提供者配置
    4. spring.application.name=008-springboot-dubbo-consumer
    5. #配置注册中心地址
    6. spring.dubbo.registry=zookeeper://192.168.60.130:2181

    F. ​​​​​​​编写一个Controller类,调用远程的Dubbo服务

    1. @RestController
    2. public class UserController {
    3. @Reference(interfaceClass = UserService.class, version = "1.0.0", timeout = 20000, retries = 3, check = false)
    4. UserService userService;
    5. @GetMapping(value = "/springBoot/hello")
    6. public Object hello(HttpServletRequest request) {
    7. String sayHello = userService.say("SpringBoot");
    8. return sayHello;
    9. }
    10. }

    G. ​​​​​​​在SpringBoot入口程序类上加开启Dubbo配置支持注解

    1. @SpringBootApplication
    2. @EnableDubboConfiguration//开启Dubbo配置支持
    3. public class Application {
    4. public static void main(String[] args) {
    5. SpringApplication.run(Application.class, args);
    6. }
    7. }

    H. ​​​​​​​测试

    (1)启动服务消费者项目主程序

    (2)浏览器访问测试

    二、SpringBoot 项目日志中警告信息的处理

    1. 在启动项目的时候,控制台出现如下警告信息 

    2. 主要是因为Zookeeper包中,slf4j-log4j12和log4j冲突了,需要处理一下

    1. <!--ZooKeeper注册中心依赖-->
    2. <dependency>
    3. <groupId>com.101tec</groupId>
    4. <artifactId>zkclient</artifactId>
    5. <version>0.10</version>
    6. </dependency>

    3. 在服务提供者和消费中的pom.xml文件的ZooKeeper依赖中添加如下内容

    1.         <!--zookeeper注册中心-->
    2.         <dependency>
    3.             <groupId>com.101tec</groupId>
    4.             <artifactId>zkclient</artifactId>
    5.             <version>0.10</version>
    6.             <exclusions>
    7.                 <exclusion>
    8.                     <groupId>log4j</groupId>
    9.                     <artifactId>log4j</artifactId>
    10.                 </exclusion>
    11.                 <exclusion>
    12.                     <groupId>org.slf4j</groupId>
    13.                     <artifactId>slf4j-log4j12</artifactId>
    14.                 </exclusion>
    15.             </exclusions>
    16.         </dependency>

    4. 再次启动查看成功解决 

  • 相关阅读:
    【自然语言处理(NLP)】文本数据处理实践
    QT:使用行编辑器、滑动条、滚动条、进度条、定时器
    【POJ No. 3264】区间最值差 Balanced Lineup
    【如何学习Python自动化测试】—— 时间等待
    短视频社交|电影点播平台Springboot+vue+ElementUI前后端分离
    2024年软件测试面试必看系列,看完去面试你会感谢我的!!
    安装Python及爬虫入门介绍
    1. GET和POST的请求的区别?
    仿真proteus8.7安装
    进博看点|数据分析管控供应链风险
  • 原文地址:https://blog.csdn.net/qq_45037155/article/details/125463112