官网教程地址:http://www.rabbitmq.com/getstarted.html
最近项目中要用到MQ消息队列来传输数据,花时间研究了一下rabbitMq,写一点东西。希望对学习mq的同学有点帮助。
在这里说明下,rabbitMq广播消息是实时的,也就是说当你的消费者启动比生产者晚的时候,你需要考虑使用rabbitMq的工作队列或者别的消息处理工具来处理。
1、安装rabbitMq。
rabbitMq是Erlang开发的,所以安装时需要先安装Erlang以支持其工作。下载地址http://erlang.org/download/
rabblitMq软件下载地址:https://www.rabbitmq.com/download.html
rabbitMq软件版本需要与Erlang版本对应,可参考http://www.rabbitmq.com/which-erlang.html查看。
注意:安装完Erlang之后先配置环境变量,再安装rabbitMq。
2、使用浏览器打开 http://localhost:15672,可以访问RabbitMq的管理控制台。在这之前,你需要:
a、打开命令窗口,输入命令:
"D:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.9\sbin\rabbitmq-plugins.bat" enable rabbitmq_management
b、然后重启服务(使用管理员运行命令行窗口)
net stop RabbitMQ && net start RabbitMQ
此时,你可以使用guest/guest登录查看队列中的消息。(guest是具有administrator角色权限的)
3、使用Java 客户端
请先阅读官网教程http://www.rabbitmq.com/tutorials/tutorial-one-java.html,下面只列出实现代码
我们将用Java编写两个程序; 发送单个消息的生产者,以及接收消息并将其打印出来的消费者。我们将掩盖Java API中的一些细节,专注于这个非常简单的事情,只是为了开始。它传递的消息是“Hello World”。
(RabbitMQ Java客户端也在中央Maven存储库中,包含groupId com.rabbitmq和artifactId amqp-client。)
发送端代码:Send.java(摘录自mq官网)
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 {
ConnectionFactory factory = new ConnectionFactory();
//设置MabbitMQ所在主机ip或者主机名
factory.setHost("localhost");
//创建一个连接
try (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("UTF-8"));
System.out.println(" [x] Sent '" + message + "'");
}
}
}
消费端代码:Recv.java
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DeliverCallback;
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");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [x] Received '" + message + "'");
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
}
}
下一篇介绍rabbitMq工作队列。