1、简述html
a) RabbitMQ是mq的一种,目前全球来说社区是最活跃的,有问题一查就有。之前写过腾讯的CMQ,社区文档真的少啊。java
b) RabbitMQ用处通常为啦异步处理,而且可实现一个业务同步处理,速度、效率明显提升。如注册,那么你想给客户发短信与邮件,那么只须要把这两个消息放入MQ中就可。spring
还能够实现项目间的解耦通信等。windows
c) 配上在网上扒的原理图:springboot
d) 分类异步
我感受能够给其分为两大类,经过有没有路由的维度分Queue(队列)与Exchange(路由)。通常开发场景都用Exchange。socket
Queue可一对一,可一对多,消息均摊。maven
Exchange有几种分别为:fanout,direct,topic,headers。ide
类型名称 | 类型描述 |
fanout | 广播路由,把全部发送到该Exchange的消息路由到全部与它绑定的Queue中 |
direct | Routing Key==Binding Key |
topic | 模糊路由经过规则匹配 |
headers | Exchange不依赖于routing key与binding key的匹配规则来路由消息,而是根据发送的消息内容中的headers属性进行匹配。 |
2、安装RabbitMQ(windows)spring-boot
a) 安装Erlang
首先,您须要安装支持的 Windows 版Erlang。下载并运行Erlang for Windows 安装程序。下载地址http://www.erlang.org/downloads
b) RabbitMQ的下载安装
下载地址http://www.rabbitmq.com/install-windows.html
c) erl环境变量配置 ERLANG_HOME=d:\javasoft\erl7.1
Path中加入%ERLANG_HOME%\bin;
测试erl配置是否正确,开始-运行-cmd,输入erl,显示以下,证实配置正确
d) RabbitMQ环境变量配置 都同样先配置环境变量再加入Path中
RABBITMQ_SERVER=C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.3
在Path中加入%RABBITMQ_SERVER%\sbin;
e) 激活rabbitmq_management
在sbin目录下输入 rabbitmq-plugins enable rabbitmq_management
或在CMD中键入以下命令 :
"C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.3\sbin\rabbitmq-plugins.bat" enable rabbitmq_management
f) 启动RebbitMQ
启动命令: net start RabbitMQ
中止命令: net stop RabbitMQ
g) RabbitMQ测试
测试地址 http://localhost:15672/
默认的用户名:guest
默认的密码为:guest

3、编写例子(springboot) 例子来自于官网 https://www.rabbitmq.com/tutorials/tutorial-one-java.html
在pom文件中加入maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
a) 发送端(生产者)
import java.io.IOException; import java.util.concurrent.TimeoutException; import org.junit.Test; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class SendMQ { private final static String QUEUE_NAME = "Hello"; public static void main(String[] args) throws IOException, Exception { // connection是socket链接的抽象,而且为咱们管理协议版本协商(protocol version negotiation), // 认证(authentication )等等事情。这里咱们要链接的消息代理在本地,所以咱们将host设为“localhost”。 // 若是咱们想链接其余机器上的代理,只须要将这里改成特定的主机名或IP地址。 ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setPort(5672); //默认端口号 factory.setUsername("guest");//默认用户名 factory.setPassword("guest");//默认密码 Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); // 接下来,咱们建立一个channel,绝大部分API方法须要经过调用它来完成。 // 发送以前,咱们必须声明消息要发往哪一个队列,而后咱们能够向队列发一条消息: channel.queueDeclare(QUEUE_NAME, false, false, false, null); String message = "Hello world"; channel.basicPublish("", QUEUE_NAME, null, message.getBytes()); System.out.println(" [x] Sent '" + message + "'"); channel.close(); connection.close(); } }
b) 接受端(消费者)
import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Connection; import java.io.IOException; import org.junit.Test; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; public class RecvMQ { private final static String QUEUE_NAME = "Hello"; public static void main(String[] args) throws IOException, Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); factory.setPort(5672); factory.setUsername("guest"); factory.setPassword("guest"); 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); } }
很少说运行看结果。
感谢网上的奉献者,在这里致谢。