【RabbitMq/SpringBoot】win10上安装RabbitMq,写程序发送接收消息
1.安装Erlang和RabbitMq
在安装RabbitMq之前需要安装的Erlang(esl-erlang_22.0_windows_amd64.exe): https://pan.baidu.com/s/1_ExgTzvCRN0byIYXgiA16g
需要安装的RabbitMq(rabbitmq-server-3.7.18.exe):https://pan.baidu.com/s/10UuuukYibnpmm16RtUZw3Q
安装时这两个软件没有特殊设置,一路同意接受就行了。
2.开启RabbitMq的管理
安装完成后,找到RaabitMq的sbin所在的目录,在我的Win10系统上,这个路径是C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin,然后打开控制台,进入这个目录.
然后输入>rabbitmq-plugins enable rabbitmq_management
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin>rabbitmq-plugins enable rabbitmq_management Enabling plugins on node rabbit@DESKTOP-8IDBHPK: rabbitmq_management The following plugins have been configured: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch Applying plugin configuration to rabbit@DESKTOP-8IDBHPK... The following plugins have been enabled: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch started 3 plugins. C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.18\sbin>
这一步的目的是为了能使用RabbitMq的控制界面。
3.查看RabbitMq的控制界面。
打开浏览器,在地址栏输入 http://localhost:15672,在弹出的登录页中都输入guest,登录进去,你将看到下面画面。
看到这个页面后,意味着RabbitMq的安装配置都完成了,下面就可以写代码了。
4.书写代码往队列里发消息
接下来打开SpringToolSuite或者其它Eclipse,新建一个Maven工程,在pom.xml里添加以下红色粗体部分的dependency。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com</groupId> <artifactId>test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>test</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>4.2.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.9</version> </dependency> </dependencies> </project>
题外话:不用Maven工程,直接用java工程也可,只是你需要自己去找对应的jar包,稍显麻烦。但网络不好用的时候还必须这么做。
创建完工程后就可以写 消息发送者 代码了。
package com.test; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; /** * Hello world! * */ public class Sender { public static void main( String[] args ) throws IOException, TimeoutException { ConnectionFactory factory=new ConnectionFactory(); factory.setHost("localhost"); Connection conn=factory.newConnection(); Channel channel=conn.createChannel(); String queueName="MsgQue"; channel.queueDeclare(queueName, false, false, false, null); String message="hello!RabbitMq"; channel.basicPublish("", queueName, null, message.getBytes()); channel.close(); conn.close(); } }
执行后不报错就说明消息发到队列里面去了。
5.书写代码从队列里取消息
在同一个工程里另外起一个类,书写下面的代码:
package com.test; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.AMQP; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import com.rabbitmq.client.Consumer; import com.rabbitmq.client.DefaultConsumer; import com.rabbitmq.client.Envelope; public class Comsumer { public static void main( String[] args ) throws IOException, TimeoutException { ConnectionFactory factory=new ConnectionFactory(); factory.setHost("localhost"); Connection conn=factory.newConnection(); Channel channel=conn.createChannel(); String queueName="MsgQue"; channel.queueDeclare(queueName, false, false, false, null); Consumer consumer=new DefaultConsumer(channel) { @Override public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body) throws IOException { String msg=new String(body,"UTF-8"); System.out.println("收到消息:"+msg); } }; channel.basicConsume(queueName, true, consumer); } }
这个类启动后就处于阻塞状态,阻塞就像一条船堵在运河(channel)上,这时从运河上飘来的东西(消息)都会被船(消息消费者)截获住。
下面是控制台的输出,其中第一条消息是消费者启动前发上去的,第二条是消费者处于阻塞时再发的,两条消息都被消费者收取(截获)了。
收到消息:你好!RabbitMq
收到消息:hello!RabbitMq
下图显示了消费者的状态:
好了,到此任务完成,恭喜你又做了一个Hello World程序。
参考书:
1.《疯狂Spring Cloud微服务架构实战》杨恩雄 编著
--END-- 2019年9月28日10:36:05
PS: 在此附上一个发送接收消息的SpringBoot工程。
https://files.cnblogs.com/files/heyang78/mqSample210810AM.rar