引入
我们的HelloWorld程序将包含两个程序:一个可以发送消息的生产者和一个可以等待接受消息的消费者。
当然,我们的程序需要一些jar包,下载地址如下:
http://www.rabbitmq.com/java-client.html
程序
生产者
发送消息的流程如下图
我们的程序将会连接到RabbitMQServer,发送一个简单的消息,最后退出。
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
public class Sender {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
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 Received {
private final static String QUEUE_NAME = "hello";
public static void main(String[] argv) throws Exception {
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 + "'");
}
}
}
首先我们运行Sender.java,然后是Received.java。结果如下:
[*] Waiting for messages. To exit press CTRL+C
[x] Received 'Hello World!'
在运行之前,要确保服务已经启动,打开rabbit 命令窗口,输入:rabbitmq-server start 来启动它。
当我们“生产”了一个消息后,可以使用“rabbitmqctl list_queues” 来查看队列。