# hsp-rabbitmq-rpc **Repository Path**: rich00/hsp-rabbitmq-rpc ## Basic Information - **Project Name**: hsp-rabbitmq-rpc - **Description**: 简化消息队列交互配置 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-02-10 - **Last Updated**: 2022-02-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 一、开发目的        目前组内各个业务系统之间的交互基本都是使用消息队列。 假设 服务A 、B 之间有业务交互,显而易见的: 一个业务接口基本就要定义一个队列进行数据发送(如果A 跟 B 存在数据交互,那么一个业务接口就要定义两个队列), 按照这个做法,当业务接口越来越多,消息队列相关元素(交换机、队列、路由key)的定义跟维护就会越来越麻烦。 rabbitmq-rpc-helper 就是针对这个情况来尽量简化这块的工作量的,目前仅仅适用于Rabbitmq 这款消息队列。 二、如何在项目中使用  1、pom配置(已在common中引入,引入common即可) com.ichoice.hsp rabbitmq-rpc-helper 4.0-SNAPSHOT 2、nacos配置新增(${spring.rabbitmq.rpc.enable},${spring.rabbitmq.rpc.timeOut}) spring: rabbitmq: rpc: enable: true timeOut: 20000  3、常用功能 (1)直连消息 生产者: 1)注入RpcRabbit发送类 2)构建ProducerModel发送参数 3)调用RpcRabbit.sent()方法发送消息 示例: @Component public class PlatformOrginfoChangeSender { //注入RpcRabbit @Resource private RpcRabbit rpcRabbit; public void send(SysOrg msg) { //构建发送参数 ProducerModel producerModel = ProducerModel.builder() .targetApplication("hsp-credit")//!必须,消费端-spring.application.name .bean("SyncOrgInfoReceiver")//!必填,消费端bean名称,注:消费端bean需要实例化到spring容器中管理 .method("syncOrgMsg")//!必填,消费端接收消息实现逻辑方法 .args(msg)//选填,消息内容,支持多个 .ttl(1000)//选填,消息延迟发送时间,单位ms .retry(3)//选填,重试次数 .retryDelay("1000")//选填,重试间隔,单位ms .build(); //发送消息 rpcRabbit.sent(producerModel); } } 消费者: 1)提供消息消费类及方法,实例化到spring容器中管理 示例: @Slf4j @Component//实例化到spring容器 public class SyncOrgInfoReceiver { @Resource private PublicBusinessAuditService publicBusinessAuditService; /** * 同步信息 */ public void syncOrgMsg(SysOrg sysOrg) { log.info("MQ Receive: syncOrgMsg({})", sysOrg); publicBusinessAuditService.syncOrgInfo(sysOrg); } } (2)延迟消息 参照直连消息,构建ProducerModel设置ttl延迟时间; (3)广播消息 生产者: 1)注入RpcRabbit发送类 3)调用RpcRabbit.fanout()方法发送广播消息 示例: // 需要交给spring管理 @Service public class LoginImpl implements Login { // 注入RpcRabbit @Resource private RpcRabbit rpcRabbit; /** * 广播登录信息 */ @Override public void fanoutLogin() { String message = "我已经登录完成了"; // 进行数据广播,支持多个入参 rpcRabbit.fanout(message); } } 消费者: 1)配置广播消息订阅,约定默认在启动项中进行广播消息订阅 示例: @SpringBootApplication public class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class, args); // 订阅生产者某个接口 // hsp-dict ==生产者-spring.application.name // LoginImpl ==生产者的bean名称 // fanoutLogin ==生产者bean的发布广播的方法 // Slove1 ==消费者处理广播数据的bean // test6 ==消费者处理广播数据的bean里的方法 SubScribeHelper.subscribe("hsp-dict","LoginImpl","fanoutLogin","Slove1","test6");//可配置多个广播订阅 } } 4、RpcRabbit接口说明 public interface RpcRabbit { /** * 消息广播 * @param args 广播信息 */ void fanout(Object... args); /** * 消息发送,该方法仅仅进行数据传输,无回参 * * @param producerModel rpc入参 */ void sent(ProducerModel producerModel); /** * 消息发送并接收回来的消息,通过回调实现, callback类需要实现 ClientListenServerCallback 接口,并且交给spring管理 * * @param producerModel rpc入参 * @param callback 回调方法 */ void sentAndBack(ProducerModel producerModel, ClientListenServerCallback callback); /** * 消息发送,并且同步接收回参 CallBackModel * * @param producerModel rpc入参 * @return 回参 */ CallBackModel sentAndBack(ProducerModel producerModel); /** * 指定方法回调, callback类需要实现 ClientListenServerCallback 接口,并且交给spring管理 * @param producerModel rpc入参 * @param callback 回调类 * @param method 指定回调方法 */ void sentBackByTargetMethod(ProducerModel producerModel, ClientListenServerCallback callback, String method); }