springboot+dubbo+zookeeper 项目实战

这篇具有很好参考价值的文章主要介绍了springboot+dubbo+zookeeper 项目实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

现在有一段代码再前台,后台系统中都存在,都需要这段代码,存在这种情况,我们可以选择将这段代码提取出来作为一个服务,让前台和后台系统作为消费者远程调用这段代码,提高了代码的复用性。
springboot集成dubbo
dubbo框架总结
因此我们需要使用dubbo,也就是rpc协议。

创建rpc系统项目

项目结构

springboot+dubbo+zookeeper 项目实战

第一步引入依赖

 <!--dubbo 依赖-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <!-- zkClient 依赖 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

开启dubbo

使用@EnableDubbo 开启Dubbo
springboot+dubbo+zookeeper 项目实战@EnableDubbo 是一个复合注解
springboot+dubbo+zookeeper 项目实战
他里面的@DubboComponentScan,同Component组件能力相同。
@EnableDubbo做了两件事,一个是初始化Dubbo核心组件,加载Dubbo配置到内存。另一个是注册BeanPostProcessor,用来扫描@Service和@Reference注解。

创建yml配置文件

server:
  port: 9092                               # 项目访问端口,默认 8080
  servlet:                                 # 项目访问路径,默认 /
    context-path: /shop-rpc

# Spring
spring:
  # 数据源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?
    username: root
    password: 123123
    # 指定 druid 连接池以及 druid 连接池配置
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 1                       # 初始连接数
      max-active: 20                        # 最大连接数
      max-idle: 20                          # 最大空闲
      min-idle: 1                           # 最小空闲
      max-wait: 60000                       # 最长等待时间
  # redis 缓存
  redis:
    timeout: 10000                          # 连接超时时间
    host: 192.168.186.128                    # Redis服务器地址
    port: 6379                              # Redis服务器端口
    database: 0                             # 选择哪个库,默认0库
    lettuce:
      pool:
        max-active: 1024                    # 最大连接数,默认 8
        max-wait: 10000                     # 最大连接阻塞等待时间,单位毫秒,默认 -1
        max-idle: 200                       # 最大空闲连接,默认 8
        min-idle: 5                         # 最小空闲连接,默认 0
    password: 123123
  #允许循环依赖
  main:
    allow-circular-references: true
  # Dubbo
dubbo:
    #开启dubbo服务,表示该应用是一个服务提供者
  server: true
    # 提供方应用信息,用于计算依赖关系
  application:
    name: rpc-provider
    # 使用 zookeeper 配置注册中心地址,后面的backup为备用地址,注册中心地址不是随便的,是需要查找的
  registry:
    address: zookeeper://192.168.186.128:2181
    # 用 dubbo 协议在 20880 端口暴露服务
  protocol:
    name: dubbo
    port: 20880
    # 扫描需要暴露的服务接口包,如果有多个包,可以使用逗号隔开
  scan:
    base-packages: com.wll.shoprpc.service


# MyBatis
mybatis:
  # 配置 MyBatis数据返回类型别名(默认别名是类名)
  type-aliases-package: com.wll.shoprpc.pojo
  # 配置 MyBatis Mapper 映射文件
  mapper-locations: classpath:mapper/*.xml

# Mybatis SQL 打印(方法接口所在的包,不是 Mapper.xml 所在的包)
logging:
  level:
    com.wll.shoprpc.mapper: debug

# Redis Key
# 商品分类列表 Key
goods.category.list.key: goods:category:list:goodsCategoryList
#用户购物车key
user.cart: userCart


zppkeeper的ip地址就是运行zookeeper的虚拟机或主机地址,这里需要暴露服务接口用dubbo.scan.base-packages
zookeeper的端口号看zoo.conf中设置的端口号,需要一一对应。

写服务接口,服务实现类,mapper,mapper.xml

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
@Component
@Service(interfaceClass = GoodsCategoryService.class,version="1.0.0",timeout = 5000)
public class GoodsCategoryServiceImpl implements GoodsCategoryService {

在Service实现类上需要加上alibaba.dubbo的@Service注解!!!!千万不能导错包!!!!
还需要加上@Component注解,把该实现类放入到spring容器中管理。

修改消费者前台系统

第一步导入依赖

同上

第二步开启dubbo

同上

第三步修改yml

server:
  port: 9091                                # 项目访问端口,默认 8080
  servlet:                                 # 项目访问路径,默认 /
    context-path: /shop-portal
# Spring
spring:
  # 数据源
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/
    username: root
    password: 123123
    # 指定 druid 连接池以及 druid 连接池配置
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 1                       # 初始连接数
      max-active: 20                        # 最大连接数
      max-idle: 20                          # 最大空闲
      min-idle: 1                           # 最小空闲
      max-wait: 60000                       # 最长等待时间

  # freemarker 模板引擎
  freemarker:
    cache: false
    charset: UTF-8
    content-type: text/html;charset=UTF-8
    enabled: true
    suffix: .ftlh
    template-loader-path: classpath:/views/
    # 配置模板里是否可以直接取request的属性 request是别名
    request-context-attribute: request
    # 配置将request和session中的键值添加到
    # AbstractTemplateView类的renderMergedOutputModel方法中的model这个Map参数中
    expose-request-attributes: true
    expose-spring-macro-helpers: true
    # 配置模板里是否可以直接取session的属性 true 是允许
    expose-session-attributes: true
    settings:
      tag_syntax: auto_detect               # 配置标签语法为自动,页面可以将 <> 改为 [],为了区别 html 标签
      template_update_delay: 0              # 模板更新时间,单位秒
      default_encoding: UTF-8               # 默认编码字符集
      output_encoding: UTF-8                # 模板输出编码字符集
      locale: zh_CN                         # 本地化配置
      date_format: yyyy-MM-dd               # 日期格式化
      time_format: HH:mm:ss                 # 时间格式化
      datetime_format: yyyy-MM-dd HH:mm:ss  # 日期时间格式化
      number_format: #.##                   # 数字格式化
      boolean_format: true,false            # boolean格式化
      # ignore,debug,html_debug,rethrow
      # 1.TemplateExceptionHandler.IGNORE_HANDLER简单地压制所有异常
      # 它对处理异常没有任何作用,也不会重新抛出异常,页面可以正常渲染,后台抛异常
      # 2.TemplateExceptionHandler.DEBUG_HANDLER打印堆栈信息和重新抛出异常。这是默认的异常控制器
      # 3.TemplateExceptionHandler.HTML_DEBUG_HANDLER和DEBUG_HANDLER相同
      # 但是可以格式化堆栈跟踪信息,HTML页面,建议使用它而不是DEBUG_HANDLER
      # 4.TemplateExceptionHandler.RETHROW_HANDLER简单重新抛出所有异常而不会做其他的事情
      # 5.使用自定义异常类实现TemplateExceptionHandler重写handleTemplateException方法
      template_exception_handler: html_debug
  # 文件上传
  servlet:
    multipart:
      max-file-size: 100MB                  # 设置单个上传文件的大小
      max-request-size: 1000MB               # 设置一次请求上传文件的总容量
  # redis 缓存
  redis:
    timeout: 10000ms                        # 连接超时时间
    host: 192.168.186.128                   # Redis服务器地址
    port: 6379                              # Redis服务器端口
    database: 0                             # 选择哪个库,默认0库
    lettuce:
      pool:
        max-active: 1024                    # 最大连接数,默认 8
        max-wait: 10000ms                   # 最大连接阻塞等待时间,单位毫秒,默认 -1
        max-idle: 200                       # 最大空闲连接,默认 8
        min-idle: 5                         # 最小空闲连接,默认 0
    password: 123123

  main:
    allow-circular-references: true
  # Dubbo
dubbo:
    #开启dubbo服务
  server: true
    # 消费方应用信息,用于计算依赖关系
  application:
    name: rpc-consumer-portal
    # 使用 zookeeper 注册中心暴露服务地址
  registry:
    address: zookeeper://192.168.186.128:2181




# MyBatis
mybatis:
  # 配置 MyBatis数据返回类型别名(默认别名是类名)
  type-aliases-package: com.wll.shopportal.pojo
  # 配置 MyBatis Mapper 映射文件
  mapper-locations: classpath:mapper/*.xml

# Mybatis SQL 打印(方法接口所在的包,不是 Mapper.xml 所在的包)
logging:
  level:
    com.wll.shopportal.mapper: debug



#用户票据key
user.ticket: user:userTicket


第四步从注册中心拿服务者提供的服务

import com.alibaba.dubbo.config.annotation.Reference;
import com.wll.shoprpc.service.GoodsCategoryService;
import com.wll.shoprpc.vo.GoodsCategoryVo;
@Controller
public class GoodsController {
    @Reference(interfaceClass = GoodsCategoryService.class,version="1.0.0",timeout = 5000)
    GoodsCategoryService goodsCategoryService;
    @RequestMapping("/goodsCategory/list")
    @ResponseBody
    public List<GoodsCategoryVo> queryGoodsCategoryList(){
        return goodsCategoryService.selectCategoryListForView();
    }
}

使用@Reference注解拿取服务文章来源地址https://www.toymoban.com/news/detail-436885.html

使用监控中心 dubbo-admin

到了这里,关于springboot+dubbo+zookeeper 项目实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • SpringBoot学习(八)-SpringBoot + Dubbo + zookeeper

    SpringBoot学习(八)-SpringBoot + Dubbo + zookeeper

    1)什么是分布式系统? 在《分布式系统原理与范型》一书中有如下定义:“ 分布式系统是若干独立计算机的集合 ,这些计算机对于用户来说就 像单个相关系统 ”; 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统 。分布式

    2024年02月02日
    浏览(3)
  • 【SpringBoot整合Dubbo和Zookeeper】

    【SpringBoot整合Dubbo和Zookeeper】

    本笔记内容为狂神说SpringBoot集成Dubbo和Zookeeper部分 目录 一、Dubbo dubbo基本概念 调用关系说明 二、Dubbo环境搭建  三、Window下安装zookeeper 1、下载zookeeper  2、运行 3、测试 四、window下安装dubbo-admin 1、下载dubbo-admin 2、解压进入目录 3、在项目目录下打包dubbo-admin 4、执行 五、S

    2024年02月08日
    浏览(10)
  • SpringBoot~ dubbo + zookeeper实现分布式开发的应用

    SpringBoot~ dubbo + zookeeper实现分布式开发的应用

    配置服务名字, 注册中心地址, 扫描被注册的包 server.port=8081 #当前应用名字 dubbo.application.name=provider-server #注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 #扫描指定包下服务 dubbo.scan.base-packages=com.demo.service 实现一个接口,在接口中完成需求 public interface Translate { String tran

    2024年04月10日
    浏览(11)
  • zookeeper和dubbo面试题,,Java初级项目案例

    zookeeper和dubbo面试题,,Java初级项目案例

    一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性。 1.1 强一致性(Strict Consistency) 也称为:**原子一致性(Atomic Consistency)** 线性一致性(Linearizable Consistency) 强一致性有两个要求: 任何一次读都能读到某个数据

    2024年03月16日
    浏览(10)
  • 启动Dubbo项目注册Zookeeper时提示zookeeper not connected异常原理解析

    启动Dubbo项目注册Zookeeper时提示zookeeper not connected异常原理解析

    原创/朱季谦 遇到一个很诡异的问题,我在启动多个配置相同zookeeper的Dubbo项目时,其他项目都是正常启动,唯独有一个项目在启动过程中,Dubbo注册zookeeper协议时,竟然出现了这样的异常提示—— 我愣了一下,原以为是zookeeper集群挂了,然后检查了一下,都正常啊,奇怪的是

    2024年02月04日
    浏览(12)
  • SpringBoot项目集成Dubbo

    SpringBoot项目集成Dubbo

    为整合Dubbo之前,我们所写的项目都是单一应用架构,只需要一个应用,将所有功能都部署在一起,在应用内部是控制层调用业务层,业务层调用数据持久层;如今,整合Dubbo后,我们可以将应用程序的不同功能单元进行拆分(将控制层、业务层以及数据持久层拆分),各个服

    2024年02月14日
    浏览(7)
  • Dubbo+Zookeeper使用_dubbo zookeeper配置

    Dubbo+Zookeeper使用_dubbo zookeeper配置

    } ?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"? 4.0.0 server: port: 8081 spring: application: name: dubbo-consumer dubbo: registry: address: zookeeper://localhost:2181 # 连接到注册中心 protocol: name: dubbo # 指定的协议 port: 28081 # 指定的端口 scan: basePackages: com.hzy.controller # 接口列表和接口中的方法列表 server: port: 8082 spring:

    2024年04月15日
    浏览(14)
  • springboot 项目,返回的实体类里面字段是null ,现在想要为空应该是““,空字符串,而不是null

    springboot 项目,返回的实体类里面字段是null ,现在想要为空应该是““,空字符串,而不是null

    返回给前端的数据,如果数据库的字段没有数据,给返回的是null 要变成这个,全局都变成这样 springboot返回给页面的json数据中,如果有数据为null,则返回空字符串。 springboot默认使用jackson解析返回json数据。 只需要加上以上的配置就可以了

    2024年01月23日
    浏览(11)
  • 【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

    【SpringBoot集成Nacos+Dubbo】企业级项目集成微服务组件,实现RPC远程调用

    在日益增长的业务需求中,一开始使用的是每个项目独立开发,虽然都是前后端分离的项目,但是每一个项目之间互不干扰。后来,因为某种需求,需要几个项目的数据相互交错获取。 最开始的想法就是集成多个数据源。 举例 有A、B、C三个项目,对应着数据库DBa、DBb、DBc、

    2024年02月04日
    浏览(13)
  • 使用 【jacoco】对基于 SpringBoot 和 Dubbo RPC 的项目生成测试覆盖率报告:实践+原理

    使用 【jacoco】对基于 SpringBoot 和 Dubbo RPC 的项目生成测试覆盖率报告:实践+原理

    基于 Dubbo RPC 的项目中有一个提供者项目backend、一个消费者项目gateway、以及注册中心nacos。本篇文章记录在windows本地对该框架的测试过程,以及介绍jacoco的基本原理 官网下载安装包解压到本地,https://www.jacoco.org/jacoco/ 只需要用到jacoco/lib 文件夹中的 jacocoagent.jar 以及jacococl

    2024年02月09日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包