package cn.lemon.rabbitmq.config; import org.springframework.amqp.core.AcknowledgeMode; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.TopicExchange; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter; import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter; import org.springframework.amqp.support.converter.MessageConverter; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MQConsumerConfig { @Value("${spring.rabbitmq.queuename}") private String queueName ; @Value("${spring.rabbitmq.exchange}") private String queueExchange; @Value("${spring.rabbitmq.routingkey}") private String routingkey; @Bean public MessageConverter messageConverter() { return new Jackson2JsonMessageConverter(); } @Bean public RabbitTemplate template(ConnectionFactory connectionFactory, MessageConverter converter) { RabbitTemplate template = new RabbitTemplate(connectionFactory); template.setMessageConverter(converter); return template; } @Bean public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, Queue queue, MessageListenerAdapter listenerAdapter) { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory); //container.setQueueNames(queueName); container.setQueues(queue); container.setExposeListenerChannel(true); container.setMaxConcurrentConsumers(1); container.setConcurrentConsumers(1); container.setPrefetchCount(1000); container.setAcknowledgeMode(AcknowledgeMode.MANUAL); //设置确认模式手工确认 container.setMessageListener(listenerAdapter); return container; } @Bean public MessageListenerAdapter listenerAdapter(MQAwareListener listener, MessageConverter converter) { return new MessageListenerAdapter(listener, converter); } @Bean public Queue queue() { return new Queue(queueName, true); } /** * 创建exchange, 可以创建TopicExchange(*、#模糊匹配routing key,routing key必须包含"."),DirectExchange,FanoutExchange(无routing key概念) * @return */ @Bean public TopicExchange exchange(){ return new TopicExchange(queueExchange); } /*@Bean public DirectExchange exchange(){ return new DirectExchange(queueExchange); }*/ @Bean public Binding binding(Queue queue, TopicExchange exchange){ return BindingBuilder.bind(queue).to(exchange).with(routingkey); } }