码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • SpringBoot + Dubbo + zookeeper实现


    目录

    一,框架搭建

    1. 启动zookeeper !

    2. IDEA创建一个空项目;

    3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可

    4.项目创建完毕,我们写一个服务,比如卖票的服务

    编写接口

    编写实现类

    编写service

    二,服务提供者

    1,第一步 

    zookeeper的包我们去maven仓库下载,zkclient;

    【新版的坑】zookeeper及其依赖包,解决日志冲突,还需要剔除日志依赖;

     在springboot配置文件中配置dubbo相关属性!

     在service的实现类中配置服务注解,发布服务!注意导包问题,因为这里的Service注解需要导入的是dubbo中的注解,而不是spring的注解,所以要把其注入就要用Componet,不过最新版本的好像已经解决这个问题:一个新的注解@DubboService

    三,服务消费者

    1.导入依赖,和之前的依赖一样;

    2.配置参数

    3.本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;

    4,完善消费者的服务类

    5.测试类编写

    四,微服务架构问题:

    分布式架构会遇到的四个核心问题:

    解决方案:


    一,框架搭建

    1. 启动zookeeper !

    2. IDEA创建一个空项目;

    3.创建一个模块,实现服务提供者:provider-server , 选择web依赖即可

    4.项目创建完毕,我们写一个服务,比如卖票的服务

    编写接口
    1. package com.guo.provider.service;
    2. public interface TicketService {
    3. public String getTicket();
    4. }
    编写实现类
    1. package com.guo.provider.service;
    2. public class TicketServiceImpl implements TicketService {
    3. @Override
    4. public String getTicket() {
    5. return "《狂神说Java》";
    6. }
    7. }

    5.创建一个模块,实现服务消费者:consumer-server , 选择web依赖即可

    6.项目创建完毕,我们写一个服务,比如用户的服务;

    编写service
    1. package com.guo.consumer.service;
    2. public class UserService {
    3. //我们需要去拿去注册中心的服务
    4. }
    二,服务提供者

    1,第一步 

    将服务提供者注册到注册中心,我们需要整合Dubbo和zookeeper,所以需要导包

    我们从dubbo官网进入github,看下方的帮助文档,找到dubbo-springboot,找到依赖包

    1. <dependency>
    2. <groupId>org.apache.dubbogroupId>
    3. <artifactId>dubbo-spring-boot-starterartifactId>
    4. <version>2.7.3version>
    5. dependency>

    zookeeper的包我们去maven仓库下载,zkclient;

    1. <dependency>
    2. <groupId>com.github.sgroschupfgroupId>
    3. <artifactId>zkclientartifactId>
    4. <version>0.1version>
    5. dependency>

    【新版的坑】zookeeper及其依赖包,解决日志冲突,还需要剔除日志依赖;

    1. <dependency>
    2. <groupId>org.apache.curatorgroupId>
    3. <artifactId>curator-frameworkartifactId>
    4. <version>2.12.0version>
    5. dependency>
    6. <dependency>
    7. <groupId>org.apache.curatorgroupId>
    8. <artifactId>curator-recipesartifactId>
    9. <version>2.12.0version>
    10. dependency>
    11. <dependency>
    12. <groupId>org.apache.zookeepergroupId>
    13. <artifactId>zookeeperartifactId>
    14. <version>3.4.14version>
    15. <exclusions>
    16. <exclusion>
    17. <groupId>org.slf4jgroupId>
    18. <artifactId>slf4j-log4j12artifactId>
    19. exclusion>
    20. exclusions>
    21. dependency>

     在springboot配置文件中配置dubbo相关属性!

    1. #当前应用名字
    2. dubbo.application.name=provider-server
    3. #注册中心地址
    4. dubbo.registry.address=zookeeper://127.0.0.1:2181
    5. #扫描指定包下服务
    6. dubbo.scan.base-packages=com.guo.provider.service

     在service的实现类中配置服务注解,发布服务!注意导包问题,因为这里的Service注解需要导入的是dubbo中的注解,而不是spring的注解,所以要把其注入就要用Componet,不过最新版本的好像已经解决这个问题:一个新的注解@DubboService

    1. import org.apache.dubbo.config.annotation.Service;
    2. import org.springframework.stereotype.Component;
    3. @Service //将服务发布出去
    4. @Component //放在容器中
    5. public class TicketServiceImpl implements TicketService {
    6. @Override
    7. public String getTicket() {
    8. return "《狂神说Java》";
    9. }
    10. }

    逻辑理解 :应用启动起来,dubbo就会扫描指定的包下带有@component注解的服务,将它发布在指定的注册中心中!

    三,服务消费者

    1.导入依赖,和之前的依赖一样;

    1. <dependency>
    2. <groupId>org.apache.dubbogroupId>
    3. <artifactId>dubbo-spring-boot-starterartifactId>
    4. <version>2.7.3version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.github.sgroschupfgroupId>
    8. <artifactId>zkclientartifactId>
    9. <version>0.1version>
    10. dependency>
    11. <dependency>
    12. <groupId>org.apache.curatorgroupId>
    13. <artifactId>curator-frameworkartifactId>
    14. <version>2.12.0version>
    15. dependency>
    16. <dependency>
    17. <groupId>org.apache.curatorgroupId>
    18. <artifactId>curator-recipesartifactId>
    19. <version>2.12.0version>
    20. dependency>
    21. <dependency>
    22. <groupId>org.apache.zookeepergroupId>
    23. <artifactId>zookeeperartifactId>
    24. <version>3.4.14version>
    25. <exclusions>
    26. <exclusion>
    27. <groupId>org.slf4jgroupId>
    28. <artifactId>slf4j-log4j12artifactId>
    29. exclusion>
    30. exclusions>
    31. dependency>

    2.配置参数

    1. #当前应用名字
    2. dubbo.application.name=consumer-server
    3. #注册中心地址
    4. dubbo.registry.address=zookeeper://127.0.0.1:2181

    3.本来正常步骤是需要将服务提供者的接口打包,然后用pom文件导入,我们这里使用简单的方式,直接将服务的接口拿过来,路径必须保证正确,即和服务提供者相同;

    4,完善消费者的服务类
     

    1. package com.guo.consumer.service;
    2. import com.guo.provider.service.TicketService;
    3. import org.apache.dubbo.config.annotation.Reference;
    4. import org.springframework.stereotype.Service;
    5. @Service //注入到容器中
    6. public class UserService {
    7. @Reference //远程引用指定的服务,他会按照全类名进行匹配,看谁给注册中心注册了这个全类名
    8. TicketService ticketService;
    9. public void buyTicket(){
    10. String ticket = ticketService.getTicket();
    11. System.out.println("在注册中心买到"+ticket);
    12. }
    13. }

    5.测试类编写

    1. @RunWith(SpringRunner.class)
    2. @SpringBootTest
    3. public class ConsumerServerApplicationTests {
    4. @Autowired
    5. UserService userService;
    6. @Test
    7. public void contextLoads() {
    8. userService.bugTicket();
    9. }
    10. }

    四,微服务架构问题:

    分布式架构会遇到的四个核心问题:

    1.这么多的服务,客户端该如何去访问?
    2.这么多的服务,服务器之间如何进行通信?
    3.这么多的服务,该如何管理和治理?
    4.服务挂了,怎么办?

    解决方案:

    SpringCloud,是一套生态,就是来解决以上分布式架构的四个问题

    想使用SpringCloud,必须要掌握Springboot,因为它是基于SpirngBoot的

    1.SpringCloud NetFlix,出了一套解决方案

    2.Apcahe Dubbo zookeeper 第二套解决方案

    API:没有,要么找第三方,要么自己实现

    Dubbo是一个高性能的基于java实现的RPC通信框架

    服务注册与发现,zookeeper,没有熔断机制,接住了Hystrix

  • 相关阅读:
    强化学习从基础到进阶-案例与实践[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代
    【React】Sigma.js框架网络图-入门篇
    常见的C语言类型转换
    基于Java+SpringBoot+Vue+echarts校园资料分享平台设计和实现
    线上 kafka rebalance 解决
    谈谈BFC
    Java注解
    VC++ 预编译头学习
    docker镜像创建成功之后设置多个数据卷挂载
    将JavaBean交给IoC容器管理和依赖注入DI
  • 原文地址:https://blog.csdn.net/weixin_54097396/article/details/138151085
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号