1

以下のコードを使用して、hello world RabbitMQ の例を実行しています。

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;

public class Send {
    private final static String QUEUE_NAME = "hello";

    public static void main(String[] argv) throws java.io.IOException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        String message = "Hello World!";
        channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

        System.out.println(" [x] Sent '" + message + "'");
        channel.close();
        connection.close(); 
      }
    }

と:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.QueueingConsumer;

public class Recv {
      private final static String QUEUE_NAME = "hello";

      public static void main(String[] argv)
          throws java.io.IOException,
                 java.lang.InterruptedException {

          ConnectionFactory factory = new ConnectionFactory();
          factory.setHost("localhost");
          Connection connection = factory.newConnection();
          Channel channel = connection.createChannel();

          channel.queueDeclare(QUEUE_NAME, false, false, false, null);
          System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

          QueueingConsumer consumer = new QueueingConsumer(channel);
          channel.basicConsume(QUEUE_NAME, true, consumer);

          while (true) {
              QueueingConsumer.Delivery delivery = consumer.nextDelivery();
              String message = new String(delivery.getBody());
              System.out.println(" [x] Received '" + message + "'");
         }
    }
}

受信者を実行すると、キューをリッスンし、送信者はメッセージを送信していると言いますが、閉じていないようです。次に実行します:

rabbitmqctl list_queues

キューは間違いなく作成されています。

しかし、私が実行すると:

rabbitmqctl list_connections

次の出力が得られます

benuni@DeShawn:~$ sudo rabbitmqctl list_connections
ls: cannot access /etc/rabbitmq/rabbitmq.conf.d: No such file or directory
Listing connections ...
guest   127.0.0.1   64700   blocked
guest   127.0.0.1   64709   blocked
guest   127.0.0.1   64614   blocked
guest   127.0.0.1   64716   blocked
guest   127.0.0.1   64717   blocked
guest   127.0.0.1   64701   blocked
guest   127.0.0.1   64699   blocking
guest   127.0.0.1   64613   blocking
guest   127.0.0.1   64708   blocking
guest   127.0.0.1   64718   blocked
guest   127.0.0.1   64706   blocked
...done.

SO 何らかの理由で rabbitmq サーバーが接続をブロックしていますか? 誰かが私が何をする必要があるか知っていますか? ありがとう、ベン

4

2 に答える 2

2

次のようなメッセージがないかログを確認してください。

=INFO REPORT==== 2-Jul-2012::13:38:02 ===
Disk free space limit now exceeded. Free bytes:13114646528 Limit:15740784640

詳細については、 http://comments.gmane.org/gmane.comp.networking.rabbitmq.general/16493を参照してください。

于 2012-07-02T13:42:57.643 に答える
1

このように接続がブロックされている場合は、おそらくディスクやメモリのウォーターマーク レベルを超えていることを意味します。

詳細については、 http ://www.rabbitmq.com/memory.html を参照してください。

于 2013-01-17T19:27:38.050 に答える