- RabbitMQ教程1:一个生产者和一个消费者
- 添加依赖:
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.1.0</version></dependency - 新建生产者类:
//引入相关Class文件 import java.util.concurrent.TimeUnit; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class Send { //定义队列名字 private final static String QUEUE_NAME = "hello"; public static void main(String[] argv) throws Exception { System.out.println("test1"); //创建连接和通道 ConnectionFactory factory = new ConnectionFactory(); // factory.setHost("192.168.248.79"); factory.setHost("192.168.65.129"); factory.setPort(5672); System.out.println("test2"); Connection connection = factory.newConnection(); System.out.println("test21"); Channel channel = connection.createChannel(); System.out.println("test3"); //为通道指明队列 channel.queueDeclare(QUEUE_NAME, false, false, false, null); String basemessage = "Hello World!"; System.out.println("test4"); for (int i = 0; i < 10; i++) { String message = basemessage + i; //发布消息 channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8")); System.out.println(" [x] Sent '" + message + "'"); TimeUnit.SECONDS.sleep(5); } System.out.println("test5"); //关闭连接 channel.close(); connection.close(); } }
- 定义队列名称:
private final static String QUEUE_NAME = "hello";
- 创建连接和通道 ,这里的localhost是 :192.168.65.129
- 为通道指明队列:
//为通道指明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello World!"; - 发布消息:
//发布消息
channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));
System.out.println(" [x] Sent '" + message + "'");
- 关闭通道:
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel; - 定义队列名称:
- 新建接收类:
import com.rabbitmq.client.*; import java.io.IOException; public class Recv { private final static String QUEUE_NAME = "hello"; public static void main(String[] argv) throws Exception { System.out.println("begin"); //建立连接和通道 ConnectionFactory factory = new ConnectionFactory(); // factory.setHost("192.168.248.79"); factory.setHost("192.168.65.129"); 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"); //回调消费消息 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 + "'"); } }; /** * QUEUE_NAME:这个队列名称要与发布者相同 * ture:表示自动确认,也就是消息一旦发送就自动确认了,不需要消费者确认 * false:表示要消费者明确返回确认 * consumer:消费者对象 */ channel.basicConsume(QUEUE_NAME, true, consumer); } }
- 创建连接和通道 ,这里的localhost是 :192.168.65.129
- 为通道指明队列:
//为通道指明队列
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "Hello World!"; - 匿名类声明消费者对象
//回调消费消息
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 + "'");
}
};
- 从通道上获取消息
//QUEUE_NAME:这个队列名称要与发布者相同
channel.basicConsume(QUEUE_NAME, true, consumer);
- 测试
- 如果队列连接不上报错,如:
Exception in thread "main" java.util.concurrent.TimeoutException
at com.rabbitmq.utility.BlockingCell.get(BlockingCell.java:77)
则检查是否开通了rabbitmq远程访问 - 添加IP地址映射: rabbitmq java.util.concurrent.TimeoutException - 好库文摘
[root@xunilocate rabbitmq]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.65.130 huike
192.168.65.129 xunilocate
- 如果队列连接不上报错,如: