Virtual host - 虚拟主机
虚拟地址,用于进行逻辑隔离,最上层的消息路由。
一个virtual host中可以有若干个Exchange和Queue。
不同的virual host中可以有相同名称的exchange和Queue。
Binding - 绑定
Exchange 和 Exchange,Queue之间的连接关系
Bindding中可以包含RoutingKey或者参数
Queue - 消息队列
消息队列,实际存储消息。
Durability:是否持久化,Durable:是,Transient:否
auto delete :如选yes,代表当最后一个监听被移除之后,该Queue会自动被删除。
Message - 消息
服务和应用程序之间传递的数据
本质上就是一段数据,有Properties和payload(Body)组成。
常用属性:
- delivery mode,
- headers(自定义属性)
其他属性:
- content_type,
- content_encoding,
- priority
- correlation_id: 消息唯一id
- reply_to: 失败后返回队列
- expiration: 消息时间
- message_id: 消息id
- timestamp,
- type,
- user_id,
- app_id ,
- cluster_id
//生产者
Map<String, Object> headers = new HashMap<>();
headers.put("my1", "111");
headers.put("my2", "222");
AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
.deliveryMode(2)
.contentEncoding("UTF-8")
.expiration("10000")
.headers(headers)
.build();
String exchangeName = "";
String routingKey = "test001";
//发布消息
for(int i = 0; i < 5; i++){
String msg = "hello rabbitmq " + i;
//1.exchange 2.routing key
//默认交换器隐式绑定到每个队列,其路由键等于队列名. 如果没有队列名,则会被删除
chennel.basicPublish(exchangeName, routingKey, properties, msg.getBytes());
}
//消费者
QueueingConsumer.Delivery delivery = queueingConsumer.nextDelivery();
String msg = new String(delivery.getBody());
Map<String, Object> headers = delivery.getProperties().getHeaders();
System.out.println("headers get my1 : " + headers.get("my1"));