RabbitMQ API(六) Message

本文介绍如何在RabbitMQ中使用自定义Header属性进行消息传递,包括生产者如何在消息中添加Header属性,以及消费者如何从消息中读取这些属性。示例代码展示了通过Map向Message的headers添加自定义属性的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

消费者

  • 没有声明 Exchange,直接声明 Queue;
  • 消费的时候通过 delivery.getProperties().getHeaders() 拿到 Message 中 header 里的自定义属性;
package com.bfxy.rabbitmq.api.message;

import java.util.Map;

import com.bfxy.rabbitmq.Application;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;

public class Consumer {

    public static void main(String[] args) throws Exception {
        
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost(Application.HOST);
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");
        
        Connection connection = connectionFactory.newConnection();
        
        Channel channel = connection.createChannel();
        
        String queueName = "test001";
        channel.queueDeclare(queueName, true, false, false, null);
        
        QueueingConsumer queueingConsumer = new QueueingConsumer(channel);
        channel.basicConsume(queueName, true, queueingConsumer);
        
        while(true){
            Delivery delivery = queueingConsumer.nextDelivery();
            String msg = new String(delivery.getBody());
            System.err.println("消费端: " + msg);
            Map<String, Object> headers = delivery.getProperties().getHeaders();
            System.err.println("headers get my1 value: " + headers.get("my1"));
        }
        
    }

}

生产者

  • 构建消息的时候,通过 Map 向 Message 的 headers 中添加自定义属性;
  • channel.basicPublish("", "test001", properties, msg.getBytes()); 直接通过 Default Exchange 投递到队列 test001 中;
package com.bfxy.rabbitmq.api.message;

import java.util.HashMap;
import java.util.Map;

import com.bfxy.rabbitmq.Application;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Producer {
    
    public static void main(String[] args) throws Exception {

        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost(Application.HOST);
        connectionFactory.setPort(5672);
        connectionFactory.setVirtualHost("/");
        
        Connection connection = connectionFactory.newConnection();
        
        Channel channel = connection.createChannel();
        
        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();
        
        for(int i=0; i < 5; i++){
            String msg = "Hello RabbitMQ!";
            channel.basicPublish("", "test001", properties, msg.getBytes());
        }

        channel.close();
        connection.close();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值