rabbitmq随手记

- type:此queue的类型,默认为classic 主队列,也可以设置为quorum 从队列
- name:此queue的名称
- durability:queue中的消息是否要持久化到硬盘
- auto delete:如果此queue没有绑定到任何一个exchange,是否自动删除此queue
- arguments:设置一些其它参数
- exchange、queue的消息持久化能力,保证了rabbitmq的高可靠性。
一、rabbitmq安装
1、下载安装erlang,原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang。
(1)官网地址:http://www.erlang.org/downloads,选择需要的版本下载。之后傻瓜式安装,直接下一步下一步。
(2)安装完后记得配置path路径:此电脑-->鼠标右键“属性”-->高级系统设置-->环境变量-->“新建”系统环境变量

(3)点击“新建”,将%ERLANG_HOME%\bin加入到path中。
(4)最后windows键+R键,输入cmd,再输入erl,看到版本号就说明erlang安装成功了。

2、下载安装rabbitmq
(1)下载地址:http://www.rabbitmq.com/download.html
(2)选择需要的版本

(3)双击下载后的.exe文件,安装过程与erlang的安装过程相同。
(4)RabbitMQ安装好后接下来安装RabbitMQ-Plugins。打开命令行cd,输入RabbitMQ的sbin目录。然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装。

(5)打开命令行命令行,进入RabbitMQ的安装目录: sbin,输入 rabbitmqctl status , 如果出现以下的图,说明安装是成功的,并且说明现在RabbitMQ Server已经启动了,运行正常。 如果没有正常启动打开sbin目录,双击rabbitmq-server.bat。

(6)等几秒钟看到这个界面后,访问http://localhost:15672,默认用户名和密码都是guest

备注:如果之前有安装过rabbitmq,访问rabbitmq页面时,如果只看到一片空白,此时需要清空下浏览器,重新访问就可以了
二、配置exchanges交换机
(1)进入rabbitmq的web界面,点击Exchanges。输入交换机名称,点击Add exchange。

三、配置queues队列
(1)进入rabbitmq的web界面,点击Queues。输入交换机名称,点击Add exchange。注意,优先级类型选择Number

四、交换机和队列绑定,选择Exchanges,点击刚新建的交换进名称,


五、rabbitmq优先级单元测试
1、需要在web界面配置queues优先级,也可以在代码里实现,我这里手动配置的。

2、
public class Producer { private final static String QUEUE_NAME = "rk_liuhui"; public static void main(String[] args) throws IOException, TimeoutException { //创建一个工厂连接 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("127.0.0.1"); factory.setUsername("guest"); factory.setPassword("guest"); //创建连接 Connection connection = factory.newConnection(); //获取信道 Channel channel = connection.createChannel(); /** * 生成1个队列 * 1.队列名称 * 2.队列里面的消息是否持久化 也就是是否用完就删除 * 3.该队列是否只供一个消费者进行消费 是否进行共享 true 可以多个消费者消费 * 4.是否自动删除 最后一个消费者断开连接以后 该队列是否自动删除 true 自动删除 * 5.其他参数 */ channel.queueDeclare(QUEUE_NAME, false, false, false, null); //要发送的消息体 String message = "hello world"; /** * 发送一个消息 * 1.发送到那个交换机 * 2.路由的 key 是哪个 * 3.其他的参数信息 * 4.发送消息的消息体 */ for (int i = 0; i < 10; i++) { //循环发送优先级不同的消息 AMQP.BasicProperties.Builder builder = new AMQP.BasicProperties.Builder(); builder.priority(i); AMQP.BasicProperties properties = builder.build(); System.out.println("发送消息优先级:"+i); channel.basicPublish("exchange.direct", QUEUE_NAME, properties, ("消息优先级:"+i).getBytes()); } System.out.println("发送消息完成"); }
public class Consumer { public static final String QUEUE_NAME = "com.liuhui"; public static void main(String[] args) throws IOException, TimeoutException { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("127.0.0.1"); factory.setUsername("guest"); factory.setPassword("guest"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); System.out.println("等待接收消息........."); //推送的消息如何进行消费的接口回调 DeliverCallback deliverCallback = (consumerTag, delivery)->{ String message = new String(delivery.getBody()); System.out.println(message); }; //取消消费的一个回调接口 如在消费的时候队列被删除掉了 CancelCallback callback = (consumerTag)->{ System.out.println("消息消费被中断"); }; /** * 消费者消费消息 - 接受消息 * 1.消费哪个队列 * 2.消费成功之后是否要自动应答 true 代表自动应答 false 手动应答 * 3.消费者未成功消费的回调 * 4.消息被取消时的回调 */ channel.basicConsume(QUEUE_NAME, true, deliverCallback, callback); }
<dependencies> <!--rabbitmq 依赖客户端--> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.8.0</version> </dependency> <!--操作文件流的一个依赖--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> </dependencies>
六、exchanges交换机三种模式介绍
1、fanout模式,广播式消息推送,不需要路由键(routing key),绑定的节点都会收到消息
2、direct模式,精确匹配routing key,将消息发送到绑定到交换机的指定队列中。
3、topic模式,模糊匹配routing key,将消息发送到绑定到交换机指定队列中。
*(星号)用来表示一个单词
#(井号)用来表示任意数量(零个或者多个)单词。

浙公网安备 33010602011771号