完善 rabbitmq 用例注释
This commit is contained in:
		@@ -1,6 +1,7 @@
 | 
			
		||||
package com.heibaiying.rabbitmq.producer;
 | 
			
		||||
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.apache.tomcat.util.codec.binary.Base64;
 | 
			
		||||
import org.springframework.amqp.rabbit.connection.CorrelationData;
 | 
			
		||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
@@ -9,6 +10,7 @@ import org.springframework.messaging.MessageHeaders;
 | 
			
		||||
import org.springframework.messaging.support.MessageBuilder;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
import java.io.UnsupportedEncodingException;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -22,22 +24,28 @@ public class RabbitmqProducer {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RabbitTemplate rabbitTemplate;
 | 
			
		||||
 | 
			
		||||
    public void sendSimpleMessage( Map<String, Object> headers,Object message,
 | 
			
		||||
    public void sendSimpleMessage(Map<String, Object> headers, Object message,
 | 
			
		||||
                                  String messageId, String exchangeName, String key) {
 | 
			
		||||
        // 自定义消息头
 | 
			
		||||
        MessageHeaders messageHeaders = new MessageHeaders(headers);
 | 
			
		||||
        // 创建消息
 | 
			
		||||
        Message<Object> msg = MessageBuilder.createMessage(message, messageHeaders);
 | 
			
		||||
        // 确认的回调 确认消息是否到达 Broker 服务器
 | 
			
		||||
        /* 确认的回调 确认消息是否到达 Broker 服务器 其实就是是否到达交换器
 | 
			
		||||
           如果发送时候指定的交换器不存在 ack就是false 代表消息不可达 */
 | 
			
		||||
        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
 | 
			
		||||
            //当ack为false时才表示消息不可达,才需要进行对应的消息补偿机制
 | 
			
		||||
            log.info("correlationData:{} , ack:{}", correlationData.getId(),ack);
 | 
			
		||||
            log.info("correlationData:{} , ack:{}", correlationData.getId(), ack);
 | 
			
		||||
            if (!ack) {
 | 
			
		||||
                System.out.println("进行对应的消息补偿机制");
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        // 消息失败的回调
 | 
			
		||||
        /* 消息失败的回调
 | 
			
		||||
         * 例如消息已经到达交换器上,但路由键匹配任何绑定到该交换器的队列,会触发这个回调,此时 replyText: NO_ROUTE
 | 
			
		||||
         */
 | 
			
		||||
        rabbitTemplate.setReturnCallback((message1, replyCode, replyText, exchange, routingKey) -> {
 | 
			
		||||
            log.info("message:{}; replyCode{}; replyText{} ;", message1.getBody(), replyCode, replyText);
 | 
			
		||||
            log.info("message:{}; replyCode: {}; replyText: {} ; exchange:{} ; routingKey:{}",
 | 
			
		||||
                    message1, replyCode, replyText, exchange, routingKey);
 | 
			
		||||
        });
 | 
			
		||||
        // 在实际中ID 应该是全局唯一 能够唯一标识消息
 | 
			
		||||
        // 在实际中ID 应该是全局唯一 能够唯一标识消息 消息不可达的时候触发ConfirmCallback回调方法时可以获取该值,进行对应的错误处理
 | 
			
		||||
        CorrelationData correlationData = new CorrelationData(messageId);
 | 
			
		||||
        rabbitTemplate.convertAndSend(exchangeName, key, msg, correlationData);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
spring:
 | 
			
		||||
  rabbitmq:
 | 
			
		||||
    addresses: 192.168.0.108:5672
 | 
			
		||||
    addresses: 127.0.0.1:5672
 | 
			
		||||
    # RabbitMQ 默认的用户名和密码都是guest 而虚拟主机名称是 "/"
 | 
			
		||||
    # 如果配置其他虚拟主机地址,需要预先用管控台或者图形界面创建 图形界面地址 http://主机地址:15672
 | 
			
		||||
    username: admin
 | 
			
		||||
    password: admin
 | 
			
		||||
    virtual-host: my_vhost
 | 
			
		||||
    username: guest
 | 
			
		||||
    password: guest
 | 
			
		||||
    virtual-host: /
 | 
			
		||||
    # 是否启用发布者确认 具体确认回调实现见代码
 | 
			
		||||
    publisher-confirms: true
 | 
			
		||||
    # 是否启用发布者返回 具体返回回调实现见代码
 | 
			
		||||
 
 | 
			
		||||
@@ -21,6 +21,9 @@ public class RabbitmqProducerTests {
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RabbitmqProducer producer;
 | 
			
		||||
 | 
			
		||||
    /***
 | 
			
		||||
     * 发送消息体为简单数据类型的消息
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    public void send() {
 | 
			
		||||
        Map<String, Object> heads = new HashMap<>();
 | 
			
		||||
@@ -31,6 +34,9 @@ public class RabbitmqProducerTests {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /***
 | 
			
		||||
     * 发送消息体为bean的消息
 | 
			
		||||
     */
 | 
			
		||||
    @Test
 | 
			
		||||
    public void sendBean() {
 | 
			
		||||
        String id = String.valueOf(Math.round(Math.random() * 10000));
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user