# 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.**