2017-12-01 9 views
0

を開始私はスプリンガーパクラウドの設定でのRabbitMQを接続します使用春の雲春のサービスコネクタおよびパブリッシャーの設定機能

@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.Set rabbitTemplate.setMandatory(真)と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); 
} 
} 

しかし、publisherConfirmは機能しませんでした。ログは出力されていません。 Howerver trueまたはfalse、ログは不在であってはならない。

答えて

1

確認に必須ではなく、返品のみです。

しようとするいくつかの点:

  1. それを見るためにデバッグログを有効ことができます。確認に関していくつかのログが生成されます。
  2. いくつかのコード

を追加します。

template.execute(channel -> { 
    system.out.println(channel.getClass()); 
    return null; 
} 

あなたがPublisherCallbackChannelImplが表示されない場合、それは設定が何らかの理由で動作しなかったことを意味します。 DEBUGのロギングは設定のデバッグに役立ちます。

まだ解決できない場合は、動作を示す最小限のアプリケーションを削除して、完全なアプリケーションを投稿してください。

+0

ローカルでこのスニペットを実行しているため、私はこの問題を発見したと思います。クラウド設定のConnectionFactoryは使用されません。したがって、publisherConfrimsは有効になっていません。どうもありがとうございました。 – Maxwell

関連する問題