# ab-rabbitMQ **Repository Path**: shao_win/ab-rabbitMQ ## Basic Information - **Project Name**: ab-rabbitMQ - **Description**: 本项目主要是为了了解rabbitMQ的使用而书写的一个测试demo - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-02-06 - **Last Updated**: 2021-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #ab-rabbitMQ 本文练习做了一个简单的消息队列的demo,一个消息生产者Send.java,一个消息消费者Recv.java,还有一个消息队列服务器rabbitMQ. 在这个例子中,生产者每5s发送一个Hello World!到队列当中,消费者时刻监听从队列当中读出信息并打印出来。 ## 部署rabbitMQ docker由于它的跨平台,可移植性高等优点备受欢迎,rabbitMQ官方也提供了docker部署的镜像,因此这里使用docker的方式进行部署。 rabbitMQ官方也提供了一个包含web管理面板插件的镜像,访问端口为`15672`,默认的用户名和密码:`guest/guest` ``` $ docker run -d --hostname my-rabbit -p 15672:15672 -p 5672:5672--name ab-rabbit rabbitmq:3-management ``` ps:`5672`为生产者,消费者连接rabbitMQ的端口 若想能够看到每一次发送的消息,还可以添加`rabbitmq_tracing`插件,启动rabbitMQ容器后进入容器,执行: ``` $ rabbitmq-plugins enable rabbitmq_tracing ``` 浏览器访问:http://{ip}:15672查看是否部署成功 添加一个trace查看捕获信息,新增的如下: ![](doc/14863759133865.jpg) ![](doc/14863757792104.jpg) 点击`MyTrace.log`即可查看text格式的日志(需要先启动后面的例子) ![](doc/14863760641879.jpg) ## 一个简单使用rabbitMQ的例子 1.项目引入依赖 ``` com.rabbitmq amqp-client 4.0.2 com.getsentry.raven raven-logback runtime 7.6.0 ``` 2.创建一个生产者 ``` package com.shaowin.rabbitMQ; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.util.concurrent.TimeoutException; /** * Created by chenshaowen on 2017/2/6. */ public class Send { private final static String QUEUE_NAME = "hello"; public static void main(String[] argv) throws java.io.IOException, TimeoutException, InterruptedException { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("101.200.169.59"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello World!"; int i=1; //测试,为了方便查看web的变化 while (true){ channel.basicPublish("", QUEUE_NAME, null, (message+i).getBytes()); i++; Thread.sleep(5000); } // System.out.println(" [x] Sent '" + message + "'"); // // channel.close(); // connection.close(); } } ``` 3.创建一个消费者 ``` package com.shaowin.rabbitMQ; import com.rabbitmq.client.*; import java.io.IOException; import java.util.concurrent.TimeoutException; /** * Created by chenshaowen on 2017/2/6. */ public class Recv { private final static String QUEUE_NAME = "hello"; public static void main(String[] argv) throws java.io.IOException, java.lang.InterruptedException, TimeoutException { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("101.200.169.59"); 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 + "'"); } }; channel.basicConsume(QUEUE_NAME, true, consumer); } } ``` 分别运行两个程序,可在web面板查看相应信息 ## 参考 * [docker部署rabbitMQ](https://hub.docker.com/r/library/rabbitmq/) * [rabbitMQ入门教程](http://www.rabbitmq.com/tutorials/tutorial-one-java.html) * [Trace插件-方便开发者追踪消息队列信息](http://www.cnblogs.com/gossip/p/4517345.html)