队列消费入口
@Component
@DependsOn(RabbitMqConfiguration.RABBITMQ_CONFIGURATION)
public class MemberReceiverConsumer {
@Autowired
private MemberMQService memberMQService;
@RabbitListener(queues = "队列名")
public void mqListener(Message message, Channel channel) throws IOException {
byte[] body = message.getBody();
String msg = "";
try {
if (null != body && body.length > 0) {
msg = new String(body);
LogUtil.logApplicationInfo("获取队列信息:" + msg);
T t = JSONObject.parseObject(msg, T.class);
memberMQService.mqListener(t);
}
} catch (BusinessException ex) {
LogUtil.logApplicationWarn("异常日志", ex);
} catch (Exception ex) {
LogUtil.logApplicationError("异常日志", ex);
} finally {
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
}
}
}
队列规范
规范
* 1 监听队列文件名 _Consumer后缀结尾
* 2 队列监听放在rabbitmq包里,队列监听和控制器功能类似,消费逻辑放在service里
* 3 监听文件处理数据,异常,ack等逻辑
* 4 类注解@Component
* 5 方法注解 @RabbitListener(queues = "队列名")
Java服务区分队列控制消费者数量
* 1 framework 版本 1.0.0+
* 2 在rabbit Consumer 类上加上@DependsOn(RabbitMqConfiguration.RABBITMQ_CONFIGURATION)
* 3 在@RabbitListener,加上containerFactory = "syncMember",syncJfkMember为上一步在配置中心里配置的containerFactory名称
* 4 配置中心加上对应配置:其中gotone.queues为固定前缀标识,syncMember为需要配置消费者的containerFactory名称,
使用者执行定义。支持驼峰,-和_,不支持. 不可以使用如queue.sync.member这种.分割的命名,配置如下
配置key |
配置value |
配置描述 |
gotone.queues.syncMember.concurrency |
1 |
Minimum number of consumers |
gotone.queues.syncMember.maxConcurrency |
2 |
Maximum number of consumers |
gotone.queues.syncMember.acknowledge-mode |
MANUAL |
Acknowledge mode of container. 默认为MANUAL |