消息接收部分代碼:
@RabbitListener
public class Receiver {
@Autowired
ConnectionFactoryConf conf;
public static final String QUEUE_A = "Q-Message";
@Bean
public Queue queue() {
return new Queue(QUEUE_A, true); // QUEUE name
}
@Bean
@RabbitHandler
public SimpleMessageListenerContainer messageContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(conf.connectionFactory());
container.setQueues(queue()); // 处理多个队列里面的信息:container.setQueues(queueA(),queueB(),queueC());
container.setExposeListenerChannel(true);
container.setMaxConcurrentConsumers(10); // 最大的並發消費者數量
container.setConcurrentConsumers(1); // 最小的並發消費者數量
container.setPrefetchCount(100); //每個消費者每次拿到的消息數量
container.setAcknowledgeMode(AcknowledgeMode.MANUAL); // 手工確認
container.setMessageListener(new ChannelAwareMessageListener() {
@Override
public void onMessage(Message message, Channel channel) throws Exception {
byte[] body = message.getBody();
String msg = new String(body, "UTF-8");
System.out.println("從隊列中收到的消息" + msg);
}
});
return container;
}
}
RMQ連接工廠配置:
@Configuration
public class ConnectionFactoryConf {
@Value("${spring.rabbitmq.host}")
private String host;
@Value("${spring.rabbitmq.port}")
private int port;
@Value("${spring.rabbitmq.username}")
private String username;
@Value("${spring.rabbitmq.password}")
private String password;
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host,port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost("/");
connectionFactory.setPublisherConfirms(true);
return connectionFactory;
}
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
return new RabbitTemplate(connectionFactory);
}
}