楚雄市建设规划批前公示在那个网站,优秀的营销案例,营销型网站管理方案,长沙网络营销哪家平台专业现在有一段代码再前台#xff0c;后台系统中都存在#xff0c;都需要这段代码#xff0c;存在这种情况#xff0c;我们可以选择将这段代码提取出来作为一个服务#xff0c;让前台和后台系统作为消费者远程调用这段代码#xff0c;提高了代码的复用性。 springboot集成dub…现在有一段代码再前台后台系统中都存在都需要这段代码存在这种情况我们可以选择将这段代码提取出来作为一个服务让前台和后台系统作为消费者远程调用这段代码提高了代码的复用性。 springboot集成dubbo dubbo框架总结 因此我们需要使用dubbo也就是rpc协议。
创建rpc系统项目
项目结构 第一步引入依赖 !--dubbo 依赖--dependencygroupIdcom.alibaba.spring.boot/groupIdartifactIddubbo-spring-boot-starter/artifactId/dependency!-- zkClient 依赖 --dependencygroupIdcom.101tec/groupIdartifactIdzkclient/artifactIdexclusionsexclusiongroupIdlog4j/groupIdartifactIdlog4j/artifactId/exclusionexclusiongroupIdorg.slf4j/groupIdartifactIdslf4j-api/artifactId/exclusionexclusiongroupIdorg.slf4j/groupIdartifactIdslf4j-log4j12/artifactId/exclusion/exclusions/dependency开启dubbo
使用EnableDubbo 开启Dubbo EnableDubbo 是一个复合注解 他里面的DubboComponentScan同Component组件能力相同。 EnableDubbo做了两件事一个是初始化Dubbo核心组件加载Dubbo配置到内存。另一个是注册BeanPostProcessor用来扫描Service和Reference注解。
创建yml配置文件
server:port: 9092 # 项目访问端口默认 8080servlet: # 项目访问路径默认 /context-path: /shop-rpc# Spring
spring:# 数据源datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/shop?username: rootpassword: 123123# 指定 druid 连接池以及 druid 连接池配置type: com.alibaba.druid.pool.DruidDataSourcedruid: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 # 最大连接数默认 8max-wait: 10000 # 最大连接阻塞等待时间单位毫秒默认 -1max-idle: 200 # 最大空闲连接默认 8min-idle: 5 # 最小空闲连接默认 0password: 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: dubboport: 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,version1.0.0,timeout 5000)
public class GoodsCategoryServiceImpl implements GoodsCategoryService {在Service实现类上需要加上alibaba.dubbo的Service注解千万不能导错包 还需要加上Component注解把该实现类放入到spring容器中管理。
修改消费者前台系统
第一步导入依赖
同上
第二步开启dubbo
同上
第三步修改yml
server:port: 9091 # 项目访问端口默认 8080servlet: # 项目访问路径默认 /context-path: /shop-portal
# Spring
spring:# 数据源datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/username: rootpassword: 123123# 指定 druid 连接池以及 druid 连接池配置type: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 1 # 初始连接数max-active: 20 # 最大连接数max-idle: 20 # 最大空闲min-idle: 1 # 最小空闲max-wait: 60000 # 最长等待时间# freemarker 模板引擎freemarker:cache: falsecharset: UTF-8content-type: text/html;charsetUTF-8enabled: truesuffix: .ftlhtemplate-loader-path: classpath:/views/# 配置模板里是否可以直接取request的属性 request是别名request-context-attribute: request# 配置将request和session中的键值添加到# AbstractTemplateView类的renderMergedOutputModel方法中的model这个Map参数中expose-request-attributes: trueexpose-spring-macro-helpers: true# 配置模板里是否可以直接取session的属性 true 是允许expose-session-attributes: truesettings: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 # 最大连接数默认 8max-wait: 10000ms # 最大连接阻塞等待时间单位毫秒默认 -1max-idle: 200 # 最大空闲连接默认 8min-idle: 5 # 最小空闲连接默认 0password: 123123main: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,version1.0.0,timeout 5000)GoodsCategoryService goodsCategoryService;RequestMapping(/goodsCategory/list)ResponseBodypublic ListGoodsCategoryVo queryGoodsCategoryList(){return goodsCategoryService.selectCategoryListForView();}
}使用Reference注解拿取服务
使用监控中心 dubbo-admin