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.mzph.cn/news/233581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jenkins在window下配置Android打包配置

在Windows下配置Jenkins进行Android打包的步骤如下&#xff1a; 安装Jenkins&#xff1a;从Jenkins官网下载适用于Windows的安装包&#xff0c;并按照安装向导的指示完成安装。 启动Jenkins服务&#xff1a;启动Jenkins服务&#xff0c;确保服务正常运行。 配置Jenkins&#…

基于SpringBoot的和微信小程序养老院管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的和微信小程序养老院管理…

在 Kubernetes 上部署 Python 3.7、Chrome 和 Chromedriver(版本 114.0.5735.90)的完整指南

一、构建基础镜像 docker build -f /u01/isi/DockerFile . -t thinking_code.com/xhh/crawler_base_image:v1.0.2docker push thinking_code.com/xhh/crawler_base_image:v1.0.2 二、K8s运行Pod 三、DockerFile文件 # 基于镜像基础 FROM python:3.7# 设置代码文件夹工作目录…

Axure中继器的使用实现表格的增删改查的自定义文件

目录 一.认识中继器 1.1.什么中继器 1.2. 中继器的组成 1.3.中继器的使用场景 二.中继器进行增删改查 三.十例表格增删改查 还有Axure这个东西许多东西需要我们去发现&#xff0c;我们需要去细心的研究&#xff0c;我们一起加油吧&#xff01;&#xff01;&#xff01;今…

ASP.NET Core MVC依赖注入理解(极简个人版)

依赖注入 文献来源&#xff1a;《Pro ASP.NET Core MVC》 Adam Freeman 第18章 依赖注入 1 依赖注入原理 所有可能变化的地方都用接口在使用接口的地方用什么实体类通过在ConfigureService中注册解决注册的实体类需要指定在何种生命周期中有效 TransientScopedSingleton 2…

SQL 入门指南:从零开始学习 SQL

当今时代&#xff0c;数据已经成为了我们生活中不可或缺的一部分。无论是企业的经营决策&#xff0c;还是个人的日常消费习惯&#xff0c;都需要通过对数据的收集、分析和应用来实现更好的结果。 而关系型数据库系统&#xff0c;作为最常见的数据存储和管理方式&#xff0c;SQ…

13 v-show指令

概述 v-show用于实现组件的显示和隐藏&#xff0c;和v-if单独使用的时候有点类似。不同的是&#xff0c;v-if会直接移除dom元素&#xff0c;而v-show只是让dom元素隐藏&#xff0c;而不会移除。 在实际开发中&#xff0c;v-show也经常被用到&#xff0c;需要重点掌握。 基本…

广州华锐互动VRAR:利用VR开展新能源汽车触电安全演练,降低培训成本和风险

随着新能源汽车行业的快速发展&#xff0c;相关的安全培训也变得越来越重要。其中&#xff0c;触电急救培训对于保障驾驶员和乘客的安全具有重要意义。传统培训方式存在一些不足&#xff0c;而利用VR技术进行培训则具有很多优势。 利用VR技术开展新能源汽车触电安全演练可以在模…

扩散模型介绍

介绍 AI 绘画中的扩散模型是近年来在计算机视觉和图像生成领域中获得关注的一种深度学习方法。这种模型特别擅长于生成高质量的图像&#xff0c;包括艺术作品和逼真的照片样式的图像。扩散模型的关键思想是通过一个渐进的、可逆的过程将数据&#xff08;在这个场景中是图像&am…

验证码:防范官网恶意爬虫攻击,保障用户隐私安全

网站需要采取措施防止非法注册和登录&#xff0c;验证码是有效的防护措施之一。攻击者通常会使用自动化工具批量注册网站账号&#xff0c;以进行垃圾邮件发送、刷量等恶意活动。验证码可以有效阻止这些自动化工具&#xff0c;有效防止恶意程序或人员批量注册和登录网站。恶意程…

设计模式(三)-结构型模式(5)-外观模式

一、为何需要外观模式&#xff08;Facade&#xff09;? 要实现一个大功能&#xff0c;我们需要将它拆分成多个子系统。然后每个子系统所实现的功能&#xff0c;就由一个称为外观的高层功能模块来调用。这种设计方式就称为外观模式。该模式在开发时常常被使用过&#xff0c;所…

.NET面试题(二)

1.c# 中new关键字的作用 实例化对象和调用构造函数&#xff1a;当使用 new 关键字创建一个类的实例时&#xff0c;它会为对象分配内存&#xff0c;并调用相应的构造函数来初始化该对象。    隐藏基类成员&#xff08;方法、属性、事件等&#xff09;&#xff1a;当在派生类中…

Axure中继器的基本使用

介绍中继器 在 Axure 中&#xff0c;中继器是一种交互设计元素&#xff0c;用于在不同页面之间传递数据或触发特定的事件。它可以帮助模拟真实的用户交互流程和页面之间的传递逻辑&#xff0c;继承关系用于描述两个元件之间的父子关系。通过使用继承关系&#xff0c;您可以创建…

Eclipse_03_如何加快index速度

1. ini配置文件 -Xms&#xff1a;是最小堆内存大小&#xff0c;也是初始堆内存大小&#xff0c;因为堆内存大小可以根据使用情况进行扩容&#xff0c;所以初始值最小&#xff0c;随着扩容慢慢变大。 -Xmx&#xff1a;是最大堆内存大小&#xff0c;随着堆内存的使用率越来越高&a…

小爱音箱pro接入gpt和语音控制电脑

系统环境win7&#xff0c;python3.11 先安装MiService&#xff0c;使用&#xff1a;GitHub - Yonsm/MiService: XiaoMi Cloud Service for mi.com这个安装没成功&#xff0c; 改用&#xff1a;GitHub - yihong0618/MiService: XiaoMi Cloud Service for mi.com 在终端使用变…

【提示工程】Chain-of-Thought Prompting Elicits Reasoning in Large Language Models

解决问题 探索大语言模型解决推理问题的能力。从头训练或微调模型&#xff0c;需要创建大量的高质量含中间步骤的数据集&#xff0c;成本过大。 相关工作 1、使用中间步骤来解决推理问题 &#xff08;1&#xff09;使用自然语言通过一系列中间步骤解决数学应用题 &#xff0…

1-完全理解以太坊智能合约

了解区块链 区块链技术的核心概念是分布式账本&#xff0c;它是许多参与者共享的特定类型的数据库。 这个特殊的数据库只是一个交易列表&#xff0c;记录着网络中发生的每笔交易。每个人都可以拥有自己的交易列表备份&#xff0c;再加上强有力的货币激励措施消除各方之间信任…

《点云处理》 点云去噪

前言 通常从传感器&#xff08;3D相机、雷达&#xff09;中获取到的点云存在噪点&#xff08;杂点、离群点、孤岛点等各种叫法&#xff09;。噪点产生的原因有不同&#xff0c;可能是扫描到了不想要扫描的物体&#xff0c;可能是待测工件表面反光形成的&#xff0c;也可能是相…

项目中webpack优化配置(持续更新)

项目中webpack优化配置 1. 开发效率&#xff0c; 体验 DLL&#xff08;开发过程中减少构建时间和增加应用程序的性能&#xff09; 使用 DllPlugin 进行分包&#xff0c;使用 DllReferencePlugin(索引链接) 对 manifest.json 引用&#xff0c;让一些基本不会改动的代码先打包…

Groovy基础学习2

1.正则表达式 正则表达式是用于在文本中查找子字符串的模式。Groovy使用~“regex”表达式本地支持正则表达式。引号中包含的文本表示用于比较的表达式。 可以创建一个正则表达式对象&#xff1a; def regex ~"Groovy" 当定义正则表达式时&#xff0c;可以使用以下…