将Spring Cloud Spring Service Connector与RabbitMQ一起使用并启动发布者配置功能

时间:2017-12-01 02:34:18

标签: spring-rabbit spring-cloud-config spring-rabbitmq

我将RabbitMQ与sprin cloud config连接:

@Bean
public ConnectionFactory rabbitConnectionFactory() {
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put("publisherConfirms", true);
    RabbitConnectionFactoryConfig rabbitConfig = new RabbitConnectionFactoryConfig(properties);
    return connectionFactory().rabbitConnectionFactory(rabbitConfig);
}

2.设置rabbitTemplate.setMandatory(true)和setConfirmCallback():

@Bean
public RabbitTemplate rabbitTemplate() {
   RabbitTemplate template = new RabbitTemplate(connectionFactory);
   template.setMandatory(true);
   template.setMessageConverter(new Jackson2JsonMessageConverter());
   template.setConfirmCallback((correlationData, ack, cause) -> {
      if (!ack) {
          System.out.println("send message failed: " + cause + correlationData.toString());
      } else {
          System.out.println("Publisher Confirm" + correlationData.toString());
      }
  });
  return template;
}

3.向队列发送消息以调用publisherConfirm并打印日志。

@Component
public class TestSender {

@Autowired
private RabbitTemplate rabbitTemplate;

@Scheduled(cron = "0/5 * *  * * ? ")
public void send() {
    this.rabbitTemplate.convertAndSend(EXCHANGE, "routingkey", "hello world",
        (Message m) -> {
            m.getMessageProperties().setHeader("tenant", "aaaaa");
            return m;
        }, new CorrelationData(UUID.randomUUID().toString()));
    Date date = new Date();
    System.out.println("Sender Msg Successfully - " + date);
 }
}

但是发布商确认没有工作。日志尚未打印。不管是真还是假,都不应该缺少日志。

1 个答案:

答案 0 :(得分:1)

确认不需要强制性,只返回。

有些事情要尝试:

  1. 启用DEBUG日志记录以查看它有帮助;有一些关于确认的日志。
  2. 添加一些代码
  3. template.execute(channel -> {
        system.out.println(channel.getClass());
        return null;
    }
    

    如果您没有看到PublisherCallbackChannelImpl,则表示配置因某些原因无效。再次,DEBUG日志记录应该有助于配置调试。

    如果您仍然无法解决问题,请将您的应用程序剥离到显示该行为的最低限度并发布完整的应用程序。