RabbitMQ Consumer不接收从Producer发送的消息

时间:2016-05-12 08:29:00

标签: rabbitmq consumer producer rabbitmq-exchange

您好我正在尝试通过rabbitMQ发送消息。我宣布直接交换并将其路由到生产者端的队列,但我无法收到消费者的消息。以下是我的消费者的代码:

 package com.rabbit.consumer;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.*;

public class Consumer {

private final static String QUEUE_NAME = "credit1";
public static void main(String[] args) throws IOException, TimeoutException {
       boolean autoAck = false;
       ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
       final Channel channel = connection.createChannel();
        //channel.queueDeclare(QUEUE_NAME, false, false, false, null);
        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
      /*  DefaultConsumer 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(QUEUE_NAME, true, consumer);*/
        channel.basicConsume(QUEUE_NAME, autoAck, "myConsumerTag",
             new DefaultConsumer(channel) {
                 @Override
                 public void handleDelivery(String consumerTag,
                                            Envelope envelope,
                                            AMQP.BasicProperties properties,
                                            byte[] body)
                     throws IOException
                 {
                     String routingKey = envelope.getRoutingKey();
                     String contentType = properties.getContentType();
                     long deliveryTag = envelope.getDeliveryTag();
                     // (process the message components here ...)
                     String message = new String(body, "UTF-8");
                     System.out.println(" [x] Received '" + message + "'" + "Routing Key : "+ routingKey);
                     channel.basicAck(deliveryTag, false);
                 }

                 @Override
                public void handleShutdownSignal(String consumerTag,
                        ShutdownSignalException sig) {
                    // TODO Auto-generated method stub
                     System.out.println("Recieving Ended");
                    System.out.println("Channel Closed : " + sig.getMessage()); 
                }
             });

}
}

我的制作人代码如下:

    package com.rabbit.producer;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.AMQP.Exchange;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
import com.rabbitmq.client.ReturnListener;
import com.rabbitmq.client.AMQP.BasicProperties;



public class Producer {
    private static final String QUEUE_NAME = "credit1";

    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("localhost");
        Connection connection = connectionFactory.newConnection();

        Channel channel = connection.createChannel();
        channel.exchangeDeclare("offerExchange", "direct", true);
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        channel.queueBind(QUEUE_NAME, "offerExchange", "credit");
        channel.addReturnListener(new ReturnListener() {

            public void handleReturn(int replyCode,
                    String replyText,
                    String exchange,
                    String routingKey,
                    BasicProperties properties,
                    byte[] body) throws IOException {
                // TODO Auto-generated method stub
                System.out.println("Message Failed" + replyText);
            }
        });
        String message = "Hello rabbit just hop !";
    /*  for(int i=1;i<=100000;i++){*/
        channel.basicPublish("offerExchange", QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
    /*  }*/
        System.out.println(" [x] Sent '" + message + "'");
        channel.close();
        connection.close();
    }
}

1 个答案:

答案 0 :(得分:0)

好的,我得到了答案错误就在这行

channel.queueBind(QUEUE_NAME, "offerExchange", "credit");

我宣布了队列credit1并且绑定了信用。愚蠢的错误。