springboot整合rabbitMQ实现批处理
在mq开发环境下,mq数据联通测试通过。
推荐:开启后,如果业务逻辑入库操作为插入数据,数据库同时做批处理,可以大大提高内存利用率,
步骤一:引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
步骤二:编辑yml文件
rabbitmq:
host: localhost
port: 5672
virtual-host: /
username: guest
password: guest
publisher-confirms: true
步骤三:配置MQConfig配置:基于路由模式
@Configuration
public class RabbitConfig {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Bean
DirectExchange orderDirect() {
return (DirectExchange) ExchangeBuilder
.directExchange(QueueEnum.QUEUE_ORDER_CANCEL.getExchange())
.durable(true)
.build();
}
@Bean
DirectExchange orderTtlDirect() {
return (DirectExchange) ExchangeBuilder
.directExchange(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getExchange())
.durable(true)
.build();
}
@Bean
public Queue orderQueue() {
return new Queue(QueueEnum.QUEUE_ORDER_CANCEL.getName());
}
@Bean
public Queue orderTtlQueue() {
return QueueBuilder
.durable(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getName())
.withArgument("x-dead-letter-exchange", QueueEnum.QUEUE_ORDER_CANCEL.getExchange())
.withArgument("x-dead-letter-routing-key", QueueEnum.QUEUE_ORDER_CANCEL.getRouteKey())
.build();
}
@Bean
Binding orderBinding(DirectExchange orderDirect,Queue orderQueue){
return BindingBuilder
.bind(orderQueue)
.to(orderDirect)
.with(QueueEnum.QUEUE_ORDER_CANCEL.getRouteKey());
}
@Bean
Binding orderTtlBinding(DirectExchange orderTtlDirect,Queue orderTtlQueue){
return BindingBuilder
.bind(orderTtlQueue)
.to(orderTtlDirect)
.with(QueueEnum.QUEUE_TTL_ORDER_CANCEL.getRouteKey());
}
@Bean("customContainerFactory")
public SimpleRabbitListenerContainerFactory customContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setBatchListener(true);
factory.setConsumerBatchEnabled(true);
factory.setConcurrentConsumers(16);
factory.setMaxConcurrentConsumers(16);
factory.setBatchSize(500);
configurer.configure(factory, connectionFactory);
return factory;
}
}
步骤四:提供者调用:
amqpTemplate.convertAndSend(参数一,参数二,参数三),
参数一:一为Exchange,路由通道
参数二:二位queue,队列
参数三:发送到MQ的业务数据
步骤五:消费者调用:
@Component
public class MornitorConsumer {
@RabbitListener(queues = "morinitor.center.cancel.ttl", containerFactory = "customContainerFactory")
public void showMSG1(List<Map<Date, String>> list) {
}
}