RabbitMQ Binding(绑定) 和 Message (消息)

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"));

猜你喜欢

转载自blog.csdn.net/gpweixing/article/details/113773342