2016-07-11 8 views
0

を解放することはできません削除、メッセージのいくつかの種類が以下のようにRabbitMQのキューを介して送信されている:RabbitMQのは、キューが私のJavaプログラムに接続

if(!con.isConnected()){ 
     log.error("Not connected !!!"); 

     return false; 
} 
con.getChannel().basicPublish("",queueName, MessageProperties.PERSISTENT_BASIC, bytes) 
  1. 私はRabbitMQの管理GUIプラグイン
  2. を経由してキューを削除してみてくださいその削除されたキューを介してメッセージを送信する

結果:私はmessagを送信しようとしていますときキューはRabbitMQのGUIから削除されたが、削除されたRabbitMQキューを越えて、接続はまだ生きています(con.isConnected()== true)。キューをリスンする方法を見つける必要があります。削除されていれば、削除されたキューにメッセージを送るべきではありません。

注:キューを削除した後、私はRabbitMQを再起動しません。

チャネル生成:

channel = connection.createChannel(); 
channel.queueDeclare(prop.getQueueName(), true, false, false, null); 

例コードチャネル、キュー、交換作成:

ConnectionFactory cf = new ConnectionFactory(); 
    cf.setUsername("guest"); 
    cf.setPassword("guest"); 
    cf.setHost("localhost"); 
    cf.setPort(5672); 
    cf.setAutomaticRecoveryEnabled(true); 
    cf.setConnectionTimeout(10000); 
    cf.setNetworkRecoveryInterval(10000); 
    cf.setTopologyRecoveryEnabled(true); 
    cf.setRequestedHeartbeat(5); 
    Connection connection = cf.newConnection(); 

    channel = connection.createChannel(); 
    channel.queueDeclare("test", true, false, false, null); 
    channel.exchangeDeclare("testExchange", "direct",true); 
    channel.queueBind("test", "testExchange", "testRoutingKey"); 

    connection.addShutdownListener(new ShutdownListener() { 

     @Override 
     public void shutdownCompleted(ShutdownSignalException cause) { 
      System.out.println("test"+cause); 
     } 
    }); 

送信メッセージ:のRabbitMQから

  channel.basicPublish("testExchange", "testRoutingKey", null,messageBodyBytes); 
+0

私たちができるようにいくつかのコードを分けてください - 少なくともあなたを助けてください。 – tommus

+0

コードブロックが状況を理解するのに役立つとは確信していませんが、とにかくそれを追加しました。 – melihcoskun

+0

キューに接続しているコードを共有してください... – tommus

答えて

0

では、Google

AMQP 0-9-1のメッセージはキューにパブリッシュされません。 がキュー(または別のエクスチェンジ)にルーティングされているかどうかに関わらず、エクスチェンジに公開されます。 [1] basic.publishは、設計上完全に非同期のプロトコルメソッドです。要求しない限り、 の応答はありません。戻り不可リスナーを定義し、必須フラグをtrueに設定してパブリッシュすると、不可能なメッセージはパブリッシャー に返されます。 パブリッシャーが確認し、必須のフラグ/リターンは直交しており、一方は を意味するものではありません。

リスンリスナーを定義し、必須フラグをtrueに設定することが私の問題として解決されました。メッセージがルーティングされなかった場合は、ReturnListenerを使用してメッセージを捕捉し、システムがアクティブになったときに別の時刻を送信するために永続キューに追加することができます。

関連する問題