生产者:
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 {
/**
* 我们把消息的发送者命名为send,消息的消费者命名为reciever(recv),消息发送者将连接到rabbitmq服务器发送一条简单的消息,然后退出;
*/
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
/**
* 连接抽象套接字连接,并负责协议版本协商和认证等。在这里,我们连接到一个本地机器的代理(中间件)上-localhost。
* 如果我们想在别的机器上连接到这个代理,我们只需在这里指定它的名称或IP地址。(amqp协议默认端口号5672)
*/
//获取一个服务器的连接
Connection connection = factory.newConnection();
//从连接中获取一个通道
Channel channel = connection.createChannel();
//在通道中声明一个队列 参数分别代表:队列名称 durable exclusive,autoDetele,arguments
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello World!";
/**
* 要发送,我们必须声明一个队列,然后我们可以向队列发布消息:
*/
//往通道的队列里面发布内容 方法参数:exchange,rounting-key,props,body
channel.basicPublish("", QUEUE_NAME, null, message.getBytes());
System.out.println(" [x] Sent '" + message + "'");
/**
* 关闭通道和连接
*/
channel.close();
connection.close();
}
}
消费者:
import java.io.IOException;
import com.rabbitmq.client.*;
public class Recv {
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");
//定义一个消费者
/**
* 我们将告诉服务器从队列中把消息发送给我们。由于它会异步地推送我们的消息,所以我们提供一个对象的回调,它将缓冲消息,直到我们准备好使用它们为止。这是一个defaultconsumer子类。
*/
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(QUEUE_NAME, true, consumer);//监听队列
}
}