# rabbitmq-starter **Repository Path**: open_source_reference/rabbitmq-starter ## Basic Information - **Project Name**: rabbitmq-starter - **Description**: rabbitmq-starter - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-04-05 - **Last Updated**: 2023-04-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # rabbitmq-starter 此插件是为rabbitmq提供一个注解方式生成用户需求的一站式插件。用户只需对消息接口类配置对应参数,即可自动生成对应队列,路由。并自动绑定对应路由队列,注解提供生成者回调方式,用户不用进行繁琐的代码开发,提高开发效率 #### 安装教程 项目pom.xml引入依赖 ``` org.framework rabbitmq-starter 1.0.0-SNAPSHOT ``` #### 使用说明 1.编写消息体接口类 例如: ``` @RabbitSettingProducer(bindings = @MqBinding( exchange = @MqExchange(value = "${test.exchange:testExchange}"), value = @MqQueue(value = "${test.queue:testQueue}"), key = "direct_key" ),callback = TestProducerCallBack.class) public interface TestProducer extends MqMessage { ``` 继承MqMessage,有点类似Mybatis。 对应接口加入RabbitSettingProducer注解,并对注解进行配置,参数配置支持SPEL表达式. 2.若需要对生产者进行ack操作,只需要编写回调函数TestProducerCallBack,配置callback参数即可 例子: ``` public class TestProducerCallBack extends AbstractMqCallback { private final Logger log = LoggerFactory.getLogger(this.getClass()); @Override public void confirm(CorrelationData correlationData, boolean ack, String cause) { if (ack) { log.info("消息发送成功:,{}", correlationData); } else { log.info("消息发送失败:,{}", cause); } } @Override public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) { log.info("消息主体:,{}", message); log.info("应答码:,{}", replyCode); log.info("描述:,{}", replyText); log.info("消息使用的交换器 exchange :,{}", exchange); log.info("消息使用的路由键 routing :,{}", routingKey); } } ``` 编写回调函数类,回调函数类需要继承AbstractMqCallback ,并按需对confirm、returnedMessage方法进行重写即可 注意,如果生成者需要开启ACK,需要在项目增加配置 ``` rabbitmq: callback: enabled: true ``` true代表开启生产者ACK,false代表关闭ACK 3.其他配置,需要在项目添加生产者消息类扫描 配置如何: ``` rabbitmq: scan: package: com.test.**.producer.** ``` 4.枚举自动序列化,反序列化举例 枚举类只需要实现EnumBase接口,就能自动进行消息体枚举参数序列化、反序列化解析 例如: ``` public enum ExamTypeEnum implements EnumBase { UNKNOWN(0, ""), EXAM_INDEPENDENT(1, "独立考试"), EXAM_COURSE_SUITE(2, "关联课程"); private final Integer code; private final String message; ExamTypeEnum(int code, String msg) { this.code = code; this.message = msg; } @Override public Integer getCode() { return code; } @Override public String getMessage() { return message; } } ``` 注:需要添加枚举类扫描配置[多个用,;隔开]: rabbitmq.converter.module.scan = com.xxx.**.model.**