RabbitMq的一些概念
Server:又称为Broker。接收客户端连接,实现AMQP的服务器实体。
Connection:连接,应用程序与Broker的网络连接。
Channel:信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。
Message:消息。服务器和应用程序之间传递的数据,本质上就是一段数据,由Properties和Body组成。
Exchange:交换机。接收消息,根据路由键转发消息到绑定的队列。
Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key。
Routing key:一个虚拟地址,虚拟机可用它来确定如何路由一个特定消息。
Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者。
Virtual Host:其实是一个虚拟概念。类似于权限控制组,一个Virtual Host里面可以有若干个Exchange和Queue,可以用来隔离Exchange和Queue。,同一个Virtual Host里面不能有相同名称的Exchange和Queue。但是权限控制的最小粒度是Virtual Host。
Spring AMQP的常用操作
CachingConnectionFactory cf = new CachingConnectionFactory();
cf.setAddresses(server);
cf.setUsername(user);
cf.setPassword(password);
RabbitAdmin admin= new RabbitAdmin(cf);
admin.declareQueue(new Queue("queue"));
RabbitTemplate template = new RabbitTemplate(cf);
template.setMessageConverter(new Jackson2JsonMessageConverter());
template.receiveAndConvert("queue");
CachingConnectionFactory实现了ConnectionFactory接口,通过调用amqp-client的ConnectionFactory函数创建ConnectionFactory。
RabbitAdmin实现了AmqpAdmin接口,AmqpAdmin主要是对交换机和路由的一些操作。
RabbitTemplate主要负责消息的发送接收。
template.convertAndSend("queue","hello");实际调用了下方的方法,convertMessageIfNecessary会根据设置的消息转换将普通对象转换为Message对象。
public void convertAndSend(String exchange, String routingKey, final Object object,
@Nullable CorrelationData correlationData) throws AmqpException {
send(exchange, routingKey, convertMessageIfNecessary(object), correlationData);
}