当前位置: 首页 > news >正文

Dubbo RPC-Redis协议

Redis协议

特性说明

Redis 是一个高效的 KV 存储服务器。基于 Redis 实现的 RPC 协议。

2.3.0 以上版本支持。

使用场景

缓存,限流,分布式锁等

使用方式

引入依赖

从 Dubbo 3 开始,Redis 协议已经不再内嵌在 Dubbo 中,需要单独引入独立的模块。

<dependency><groupId>org.apache.dubbo.extensions</groupId><artifactId>dubbo-rpc-redis</artifactId><version>1.0.0</version>
</dependency>

注册 redis 服务的地址

RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("redis://10.20.153.11/com.foo.BarService?category=providers&dynamic=false&application=foo&group=member&loadbalance=consistenthash"));

在客户端引用

不需要感知 Redis 的地址

在客户端使用:

<dubbo:reference id="store" interface="java.util.Map" group="member" />

或者点对点直连:

<dubbo:reference id="store" interface="java.util.Map" url="redis://10.20.153.10:6379" />

也可以使用自定义接口:

<dubbo:reference id="store" interface="com.foo.StoreService" url="redis://10.20.153.10:6379" />

其中 “p:xxx” 为 spring 的标准 p 标签

<dubbo:reference id="cache" interface="com.foo.CacheService" url="redis://10.20.153.10:6379" p:set="putFoo" p:get="getFoo" p:delete="removeFoo" /

spring boot + Dubbo + Redis注册中心 实现RPC调用


众所周知 dubbo推荐使用zookeeper做服务发现,但今天我们来使用另一种Redis做服务发现 这样省去了维护两种服务的经历 并且可以用作生产

POM

  <dependency><groupId>com.alibaba.spring.boot</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.0.0</version></dependency><!--redis 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.7</version></dependency>

dubbo server


dubbo server 服务提供者 application.yml

spring:application:name: dubbo-producerdubbo:provider:threadpool: fixedthreads: 2000application:id: server-producername: server-producerqos-enable: trueqos-port: 22222qos-accept-foreign-ip: falseregistry:# 使用redis 注册中心暴露服务地址address: redis://127.0.0.1:6379protocol:name: dubbo# 高效序列化 kryo, fst#用dubbo协议在20880端口暴露服务port: 20884#性能监控中心地址monitor:protocol: dubboaddress: 127.0.0.1:7070scan: cn.itcast.service
server:port: 8888



dubbo服务提供者中创建service接口

public interface IDubboDemoService {String helloDubbo();}


service接口实现

import com.alibaba.dubbo.config.annotation.Service;//@Service(version = "2.0.0")
@DubboService(version = "3.0.0", group = "dev", timeout = 5000)
public class IDubboDemoServiceImpl implements IDubboDemoService {
@Overridepublic String helloDubbo() {return "hello dubbo, 我是提供者";}}

dubbo client

dubbo client服务消费者 application.yml

spring:
application:name: dubbo-consumer
dubbo:provider:threadpool: fixedthreads: 2000application:#      id: database-consumername: database-consumer#      qos-enable: true#      qos-port: 33333#      qos-acceptforeign-ip: falseregistry:#使用redis注册中心暴露服务地址address: redis://127.0.0.1:6379monitor:#      protocol: dubboaddress: 127.0.0.1:7070
server:
port: 9988

dubbo client 服务消费者service接口要与提供者接口名称相同

public interface IDubboDemoService {String helloDubbo();
}    
@Service
public class IDubboDemoServiceImpl implements IDubboDemoService {@Override//该内容随便写public String helloDubbo() {return "hello dubbo, I'm server!";}}


@Service 来自spring依赖

创建自己的接口

public interface IDemoService {String test();
}
@Service
public class DemoServiceImpl implements IDemoService {//调用dubbo服务// @Reference(version = "2.0.0")@DubboReference(version = "3.0.0")public IDubboDemoService dubboDemoService;@Overridepublic String test() {return    dubboDemoService.helloDubbo();}
}



启动类

@SpringBootApplication
@EnableDubbo
@DubboComponentScan(basePackages = "cn.itcast.service")
public class DubboServiceApplication {public static void main(String[] args) {SpringApplication.run(DubboServiceApplication.class,args);}
}

Spring Boot 注解默认只会扫描 main 类所在的 package,如果服务定义在其它 package 中,需要增加配置 EnableDubbo(scanBasePackages = {"org.apache.dubbo.springboot.demo.provider"})

伪代码

@Autowired(required = false)
private IDemoService demoService;
@GetMapper("/get")
demoService.test

即可返回“hello dubbo, 我是提供者”
 

http://www.lryc.cn/news/263475.html

相关文章:

  • 展开说说:Android之常用的延时执行策略
  • Jenkins在window下配置Android打包配置
  • 云原生系列2-GitLab和Jenkins
  • xcode无线真机调试详细图文步骤
  • EasyExcel合并相同内容单元格及动态标题功能的实现
  • 【论文解读】Comparing VVC, HEVC and AV1 using Objective and Subjective Assessments
  • 动态窗口法Dynamic Window Approach在动态环境中避障
  • 2023.12.15 FineBI与kettle
  • Python tkinter 初探Toplevel控件搭建父子窗口
  • SpringCloud源码探析(十二)-基于SpringBoot开发自定义中间件
  • 基于CNN+数据增强+残差网络Resnet50的少样本高准确度猫咪种类识别—深度学习算法应用(含全部工程源码)+数据集+模型(一)
  • python实现贪吃蛇游戏
  • ios备忘录怎么导入华为 方法介绍
  • electron与cesium组件入门应用功能
  • Jenkins Docker Cloud在Linux应用开发CI中的实践
  • 502 Bad Gateway with nginx + apache + subversion + ssl
  • 【PostgreSQL内核学习(十八)—— 存储管理(存储管理的体系结构)】
  • Android的组件、布局学习
  • 【离散数学】——期末刷题题库(树其一)
  • 光模块市场分析与发展趋势预测
  • Python轴承故障诊断 (八)基于EMD-CNN-GRU并行模型的故障分类
  • 鸿蒙实现年月日十分选择框,支持年月日、月日、日、年月日时分、时分切换
  • IntelliJ IDE 插件开发 | (三)消息通知与事件监听
  • VUE小知识点
  • 深入了解常见的应用层网络协议
  • 网络爬虫 多任务采集
  • 真实并发编程问题-1.钉钉面试题
  • 基于vue+element-plus+echarts制作动态绘图页面(柱状图,饼图和折线图)
  • 2312llvm,02前端
  • 【MATLAB源码-第101期】基于matlab的蝙蝠优化算BA)机器人栅格路径规划,输出做短路径图和适应度曲线。