RabbitMQ是一个在AMQP协议标准基础上完整的,可复用的企业消息系统。它遵循Mozilla Public License开源协议,采用 Erlang 实现的工业级的消息队列(MQ)服务器,Rabbit MQ 是建立在Erlang OTP平台上。
安装RabbitMQ服务器必须首先安装 Erlang 运行环境。
1.安装Erlang
安装Erlang 时要注意安装的RabbityMQ 所依赖的Erlang版本 ,根据RabbitMQ的要求选择一个版本,这里安装的RabbitMQ的版本是 3.8.19 ,他依赖的Erlang版本范围是23.2到 24.x,因此我选择版本是OTP 24.0.Erlang 下载地址。
查看RabbitMQ所依赖的Erlang版本:https://www.rabbitmq.com/which-erlang.html
下载Erlang安装包后,直接双击安装就可以了。 双击,如下: 点击next,如下: 更换路径,点击next,如下: 点击Install,进行安装,稍等会,安装成功:
2.设置ERLANG_HOME 环境变量
变量名:ERLANG_HOME 变量值: erlang的安装地址 点击确定在系统环境变量里就增加刚刚添加的ERLANG_HOME 然后,双击系统变量Path 点击新建,将%ERLANG_HOME%\bin加入到Path中。 最后windows键+R键,输入cmd,再输入erl,看到版本号就说明erlang安装成功了。
注意:如果之前安装了Erlang的其他版本,需要卸载后在进行重新安装和设置。
接下来安装RabbitMQ。
3.安装RabbitMQ
可以在RabbitMQ的官方网站下载最新版本的RabbitMQ服务器安装程序。 RabbitMQ下载地址, 这里我下载的是官方推荐的最新版本rabbitmq-server-3.8.19.exe, 然后点击默认安装。
RabbitMQ安装好后是作为windows service 运行在后台。
4.设置RabbitMQ环境变量
RabbitMQ 安装好后在开始菜单输入rabbitmq 会看到如下几个菜单: 红色圈内的三个菜单是提供控制Windows service的命令,为了能够在任意Windows命令窗口上操控RabbitMQ服务需要在系统里加一个环境变量并且配置在系统的PHTH环境变量中。
首先添加一个RABBITMQ_SERVER变量:
然后在系统的path变量中如下配置:
这样就可以在windows administrator启动的CMD窗口操控RabbitMQ服务了。 不需要每次都定位到: D:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.19\sbin>
5.安装rabbitmq-management
我们可以使用命令查看一下RabbitMQ的所有插件:
C:\Users\qzz>rabbitmq-plugins list
看到RabbitMQ罗列出来了很多插件 我们用下列命令安装rabbitmq_management插件,这款插件是可视化的方式查看RabbitMQ服务器实例化的状态,以及操控RabbitMQ服务器。
C:\Users\qzz>rabbitmq-plugins enable rabbitmq_management
运行完命令后,看到如下图表示安装成功了。 现在我们在浏览器中输入:http://localhost:15672可以看到一个登录界面: 这里可以使用默认账号guest/guest登陆后的界面如下: 在浏览器中输入http://localhost:15672/api/index.html就可以看到Rabbit MQ Management HTTP API文档,如下图:
这样就可以查看Rabbit MQ server实例状态的相关信息了。
6.管理rabbitmq_management的用户
用命令rabbitmqctl list_users 查看一下现rabbitmq_management注册用户: 发现现在只有一个用户guest,并且它的tag是administrator。
那么在命令行下创建一个用户,创建用户的命令是:
rabbitmqctl add_user [username] [password]
现在创建一个username=rabbit1 password=rabbit1的用户,命令如下:
rabbitmqctl add_user rabbit1 rabbit1
创建成功了: 现在再看下有多少用户,执行一下命令:
rabbitmqctl list_users
发现用户多了一个rabbit1,但是tag是空的。使用命令给用户rabbit1设置tag, 设置tag的命令是:
rabbitmqctl set_user_tags [tag1] [tag2] ...
一次可以给一个用户设置多个tag,也可以设置一个 现在用户rabbit1有两个tag了,一个是administrator,1个是none。
有5个tag可供选择: administrator、monitoring、policymaker、management和none。
其实这里的tag代表的是权限,administrator是最高权限,none表示不能访问,这里administrator和none的组合,权限应该是向高看齐,忽略none,用的是administrator的权限 。
有兴趣的同学可以到这里了解各个tag的含义
tag含义如下: 我们用rabbit1/rabbit1 登录rabbitmq_management。 其实有了rabbitmq_management这个可视化插件,很多事情都可以在这个插件里干,包括创建用户,创建交换机(Exchange)和创建队列(Queque)。
关于Rabbit的在windows下的基本配置就告一段落,关于更多的更高级的配置,可以参考官网,有了rabbitmq_management 插件确实方便了不少。
下面就开始创建客户端进行测试了。
7.测试
创建两个.Java 类型的应用程序,一个用于发送消息,一个用于接收消息。
7.1创建一个maven项目,添加amqp-client依赖
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.3</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
7.2创建一个连接工具类,建立与RabbitMQ的连接
package demo.util;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
public class ConnectionUtil {
public static Connection getConnection() throws Exception{
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setPort(5672);
factory.setVirtualHost("/");
factory.setUsername("guest");
factory.setPassword("guest");
Connection conn = factory.newConnection();
return conn;
}
}
7.3创建一个类,用于生产者发送消息
package demo;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import demo.util.ConnectionUtil;
public class Send {
private final static String QUEUE_NAME = "simple_queue";
public static void main(String[] args) throws Exception {
Connection connection = ConnectionUtil.getConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String message = "Hello World!";
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("[X] send '" + message + "'");
channel.close();
connection.close();
}
}
运行此类,控制台信息如下,生产者发送信息成功: web管理页面:服务器地址/端口号 (本地:http://localhost:15672,默认用户及密码:guest guest)
7.4创建一个类,用于消费者接收消息
package demo;
import com.rabbitmq.client.*;
import demo.util.ConnectionUtil;
import java.io.IOException;
public class Receive {
private final static String QUEUE_NAME = "simple_queue";
public static void main(String[] args) throws Exception{
Connection connection = ConnectionUtil.getConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
DefaultConsumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
String exchange = envelope.getExchange();
long deliveryTag = envelope.getDeliveryTag();
String msg = new String(body,"utf-8");
System.out.println("[X] received: " + msg);
}
};
channel.basicConsume(QUEUE_NAME,true,consumer);
}
}
运行此类,控制台信息如下,消费者发送信息成功:
再看看队列的消息,已经被消费了:
我们发现,消费者已经获取了消息,但是程序没有停止,一直在监听队列中是否有新的消息。一旦有新的消息进入队列,就会立即打印。
验证:再次执行Send,Send控制台发送一条消息, Receive自动接受该消息
总结:
关于RabbitMQ在windows 下的安装和基本设置步骤:
??1.安装对应版本的Erlang 并设置环境变量
??2.安装RabbitMQ
??3.设置环境变量
??4.安装插件rabbitmq_management
??5.有了插件rabbitmq_management很多事情就可以在这个可视化插件中来完成了。
参考资料: Windows 下安装RabbitMQ服务器及基本配置 RabbitMQ快速入门(详细)
|