Springboot 使用RabbitMQ
使用RabbitMQ,发送消息时并不是直接发送到Queue中,而是发送到exchange中然后依据发送时的routing key
和绑定到exchange上的binding key
将消息路由到Queue中。
queue&exchange&bingding key
//发送消息
public void sendMessage() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String json = format.format(new Date());
rabbitTemplate.convertAndSend("exchange.test"/*exchange*/,"test.message"/*routing key*/, json);
}
//监听MQ队列
@RabbitListener(queues = "test.queue")
public void process1(@Payload String message) {
LOG.info("test.queue message: {}", message);
}
@RabbitListener(queues = "queue.message")
public void process2(@Payload String message) {
LOG.info("queue.message message: {}", message);
}
RabbitTemplate
默认使用SimpleMessageConverter.createMessage()
将消息Object
转换成Message
对象。
对于String
,调用getBytes()
方法将String
转换为字节数据;对于Serializable
将对象序列化为字节数组。
Virtual Host
每个virtual host本质上都是一个RabbitMQ Server,拥有它自己的queue,exchagne,和bings rule等等。这保证了你可以在多个不同的application中使用RabbitMQ。
Exchange
生产者将信息发送到Exchange中,然后Exchange根据
Routing Key
和Bingding Key
将消息分发到不同的Queue中Exchange 类型
Fanout
fanout会把发送到该exchange中的消息转发到所有与它绑定的Queue中。
Direct
direct会把发送到该exchange中的消息路由到
routing key
和binding key
完全匹配的Queue中。
Topic
topic会将消息路由到
routing key
和bingding key
相匹配的Queue中。