# RabbitMQ-demo **Repository Path**: HK-Poc/RabbitMQ-demo ## Basic Information - **Project Name**: RabbitMQ-demo - **Description**: 消息发布中间件 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-01-24 - **Last Updated**: 2020-12-19 ## 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 mobile-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management ``` ps:`5672`为生产者,消费者连接rabbitMQ的端口 浏览器访问:http://{ip}:15672查看是否部署成功 ## 一个简单使用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 2018/1/24. */ 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 2018/1/24. */ 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)