简体   繁体   English

RabbitMQ Java使用者线程

[英]RabbitMQ Java Consumer Thread

I am new to rabbitMQ.I have written a java consumer in the following way.Please advice me whether it is correct implementation of the Thread+RabbitMQ .I have created three threads which consumer data from the queue and do the processing. 我是RabbitMQ的新手,我以下面的方式编写了Java使用者。请告知我Thread + RabbitMQ的实现是否正确。我创建了三个线程来从队列中使用使用者数据并进行处理。

public class TileJobs implements Runnable {
private static final String EXCHANGE_NAME = "fanout_logs";
Connection connection;
ConnectionFactory factory;
Channel channel;
String name;
int count = 0;

TileJobs(String name) throws IOException, TimeoutException {
    factory = new ConnectionFactory();
    factory.setHost("192.168.2.4");
    factory.setUsername("manish");
    factory.setPassword("mm@1234");
    connection = factory.newConnection();
    channel = connection.createChannel();
    this.name = name;
    channel.exchangeDeclare(EXCHANGE_NAME, "fanout");
    channel.queueDeclare("test", true, false, false, null);
    channel.queueBind("test", EXCHANGE_NAME, "");
    channel.basicQos(1);
}

@Override
public void run() {
    // TODO Auto-generated method stub
    System.out.println("inside the run");
    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(TileJobs.this.name);
            TileJobs.this.count = TileJobs.this.count + 1;
            System.out.println(TileJobs.this.count);
            System.out.println(" [x] Received '" + envelope.getRoutingKey() + "':'" + message + "'");
            channel.basicAck(envelope.getDeliveryTag(), false);
        }
    };
    try {
        channel.basicConsume("test", false, consumer);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

} }

public class ReceiveLogsDirect {

private static final String EXCHANGE_NAME = "fanout_logs";

public static void main(String[] argv) throws Exception {
    TileJobs consumer = new TileJobs("manish");
    Thread consumerThread = new Thread(consumer);
    consumerThread.start();
    TileJobs consumer1 = new TileJobs("manish1");
    Thread consumerThread1 = new Thread(consumer1);
    consumerThread1.start();
    TileJobs consumer2 = new TileJobs("manish2");
    Thread consumerThread2 = new Thread(consumer2);
    consumerThread2.start();

}

} }

Regards Manish 关于Manish

您可以创建一个类来获取与Rabbitmq服务器的连接。在程序中,使用一个连接使用多个通道来消耗队列。请注意,一个消费者使用一个通道。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM