当前位置: 首页 > 知识库问答 >
问题:

Rabbitmq-如何侦听exchange上的消息

任昊苍
2023-03-14

我有一个Java程序,它向RabbitMQ发送消息。我只知道交易所的名字。没有队列、绑定等。

我的问题是:我如何才能看到程序是否成功发送这些,只知道交换名称?

谢谢

问候,塞班

共有3个答案

商华藏
2023-03-14

请看这里:https://www.rabbitmq.com/tutorials/tutorial-three-java.html

java prettyprint-override">String queueName = channel.queueDeclare().getQueue();
channel.queueBind(queueName, "EXCHANGE_NAME", "");

System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
Consumer consumer = new DefaultConsumer(channel) {
  @Override
  public void handleDelivery(String consumerTag, 
                             Envelope envelope,
                             AMQP.BasicProperties properties, 
                             byte[] body) throws IOException 
{
    String message = new String(body, "UTF-8");
    System.out.println(" [x] Received '" + message + "'");
  }
};
channel.basicConsume(queueName, true, consumer);

简而言之,你必须:

  1. 创建一个队列,在本例中为匿名队列
  2. 将队列绑定到您的交易所

重要的是要知道你有什么样的交换,因为绑定可以改变,在扇出主题直接之间

本例中为< code >扇出

杜晨朗
2023-03-14

假设我们有RabbitMQ Exchange,我们需要创建一个队列来将消息推送到交换机并从队列中使用它,如下所示


    private static final String EXCHANGE_NAME = "2022";
    private static final String QUEUE_NAME = "2022";
    private final static boolean durable = true;

// now we need to create a connection to rabbitmq server //

        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("/");
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        Connection conn = factory.newConnection();
       // create rabbitmq connection chaneel        
       Channel channel = conn.createChannel();
      //Declare Exchange // 
      channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);
     // push message to rabbitmq exchange 

channel.basicPublish(EXCHANGE_NAME, "routingkey", null, yourmessage.getBytes());



上面的工作作为生产者,现在我们需要创建队列消费者


    private static final String EXCHANGE_NAME = "2022";
    private static final String QUEUE_NAME = "2022";
    private final static boolean durable = true;

// now we need to create a connection to rabbitmq server //

        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("/");
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        Connection conn = factory.newConnection();
        // create rabbitmq connection chaneel       
        Channel channel = conn.createChannel();


          channel.exchangeDeclare(EXCHANGE_NAME, "topic", true);

          //Queue Declare //
          channel.queueDeclare(QUEUE_NAME, true, false, false, null);
         //Queue bind //
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "routingkey");
        // Queue Consume // 
        QueueingConsumer consumer = new QueueingConsumer(channel);

  while (true)
        {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());

            System.out.println(" [x] Received '" + message + "'");


        }


皇甫通
2023-03-14

您可以使用RabbitMQ启用发布者确认。这就像有一个发送事务,RabbitMQ会告诉您消息是否已成功发送。

 类似资料:
  • 问题内容: 一个典型的Redis聊天示例将如下所示(仅举一个这样的示例,请参见https://github.com/emrahayanoglu/Socket.io- Redis-RealTime-Chat- Example/blob/master/chatServer.js ): 但是,这里的问题是,当“断开连接”时,侦听器仍然处于连接状态。控制台将继续打印出。如果要检查的事件列表,他们仍然会发现

  • 我使用spring amqp和rabbitmq在我的应用程序中交换消息。一旦我的应用程序启动,我将在我的tomcat控制台中不断看到大量的消息监听日志。我想禁用。怎么做? 下面是我的log4j配置。尽管我只提到了文件appender,但所有侦听器日志都在我的应用服务器控制台中打印。 需要添加任何配置吗? 编辑帖子: 我添加了在JAVA_OPTS中。请在下面找到日志。 我的项目结构如下所示。 项目结

  • 我正在使用 发送和 对于现在从rappid mq接收消息,我希望使用类似以下内容的侦听器: 问题是onMessage监听器与Messages一起工作是否有可能在类似的函数中接收简单的可序列化对象?

  • 我试图理解RabbitMQ对发布的保证——到目前为止没有成功——我想知道是否有人可以帮助我解决这个问题: 绑定 交易所 A - 交易所 A - 交易所B- 交易所C- 属性 B1和C1被声明为持久队列 B1和C1都是镜像队列 所有交换机均声明为扇出 我正在运行一个具有多个节点的RabbitMQ集群,因此队列可以在不同的节点上主控 如果我发布到Exchange A,那么我是将消息发布到所有队列还是不

  • 我正在开发一个基于通知的应用程序,为此我需要监听传入的通知。我已经能够监听来电、短信、邮件等。我不知道如何通过代码监听Whatsapp上朋友的ping或消息。这实际上能做到吗?如果是,怎么做?可访问性服务是否可以用于此,使用包名为“com.whatsapp”?

  • 问题内容: 我有一个反向代理背后的应用程序,我希望它仅侦听localhost / 127.0.0.1.。 我希望这可以工作: 要么 …但是我得到一个错误: 在不指定主机名的情况下运行应用程序可以正常工作,即。 我正在运行Node v0.6.14 和express @ 2.5.5 ,并阅读了此Google 网上论坛的 讨论, 并在Express application.js中找到此注释,并说:“此方