Java 多线程测试 MQ 性能步骤及代码(示例: 简单模式)
原文1
win10安装rabbitmq.3.8.14与启动
Erlang 运行环境 otp_win64_23.2.exe 以及 rabbitmq-server-3.8.14.exe 下载以及安装
原文2
原文3
本文源代码下载:https://github.com/looyolo/looProj_test-rabbitmq.git
下载地址:
erlang https://www.erlang.org/downloads
RabbitMQ http://www.rabbitmq.com/
两者之间的关系:RabbitMQ 服务端代码,
是使用并发式语言 erlang 编写的。
由于是国外网站,下载很慢甚至一直连不上,
幸运的是,有网友分享:
百度网盘:https://pan.baidu.com/s/1cYvOp9YCqqnzDrqUEk8eVw
提取码:dj1f
迅雷:https://pan.xunlei.com/s/VMV-lVsFTp0CZ3mrKIwNiB4IA1
提取码:g7nu
1:Windows下安装 RabbitMQ 需要以下几个步骤
(0):准备:先打开 RabbitMQ 下载地址页面,了解 erlang 和 RabbitMQ 的兼容版本,如图,
(1):下载 erlang,双击 .exe 文件进行安装就好。
安装完成之后,创建一个名为 ERLANG_HOME 的环境变量,其值指向 erlang 的安装目录,同时将 %ERLANG_HOME%\bin 加入到 Path 中,然后以管理员身份运行 CMD,打开“命令提示符“窗口,输入 erl ,如果出现 erlang 的版本信息就表示 erlang 语言环境安装成功;
(2):下载 RabbitMQ ,同样双击 .exe 进行安装就好。
这里需要注意一点,改变安装目录的话,目录中是不允许有空格的;
安装完成后,在 RabbitMQ 的安装目录的 sbin 会有:rabbitmq-server.bat
如下图,
在 cmd 窗口运行 rabbitmq-server start
注意:首次安装后,默认是启动的,所以这一步不用执行,直接到下一步。
(3):安装 RabbitMQ-Plugins ,这个相当于是一个管理界面,方便我们在浏览器界面查看 RabbitMQ 各个消息队列以及 exchange 的工作情况。
安装方法是:打开命令行 cd 进入 rabbitmq 的 sbin 目录 (我的目录是:D:\honor_RocketMQ\rabbitmq-server-3.8.14_installed_here\rabbitmq_server-3.8.14\sbin ) ,运行命令:rabbitmq-plugins enable rabbitmq_management 开启 Web 管理插件,稍等一下会发现出现 plugins started 成功的提示。
关闭 CMD 窗口,停止Web plugins 管理服务。
(4):插件安装完之后,在浏览器输入 http://localhost:15672 进行验证,你会看到下面界面,输入
用户名:guest
密码:guest
你就可以进入管理界面,当然用户名密码你都可以变的;
2:安装完 RabbitMQ 之后,我们先来简单了解下 RabbitMQ 中涉及到的几个概念
producer: 消息生产者
consumer: 消息消费者
virtual host: 虚拟主机,在 RabbitMQ 中,用户只能在虚拟主机的层面上进行一些权限设置,比如我可以访问哪些队列,我可以处理哪些请求等等;
broker: 消息转发者,也就是 RabbitMQ 服务端充当的功能。
那么,消息是按照什么规则进行转发的呢?
需要用到下面几个概念;
exchange: 交换机,和 producer 直接进行打交道的,有点类似于路由器的功能,主要就是进行转发操作的呗,那么 producer 到底用哪个 exchange 进行路由呢?这个取决于 routing key (路由键) ,每个消息都有这个键,我们也可以自己设定,其实就是一行字符串;
queue: 消息队列,用于存放消息,他接收 exchange 路由过来的消息,我们可以对队列内容进行持久化操作 (keepalive),那么 queue 到底接收哪一个 exchange 路由的消息呢?这个时候就要用到 binding key (绑定键) 了,绑定键会将队列和 exchange 进行绑定,至于绑定方式,RabbitMQ 提供了多种方式,大家可以看看鸿洋大神的 RabbitMQ博客系列 (点击查看);
以上就是 RabbitMQ 涉及到的一些概念了,
用一张图(图 1)表示这些概念之间的关系就是:
图 1
图 2
图 2 中第 1 种方式:简单模式:
RabbitMQ 是信息传输的中间者。
本质上,他从生产者(producers)接收消息,
转发这些消息给消费者(consumers),
能够按根据你指定的规则进行消息转发、缓冲、和持久化。
RabbitMQ 的一些常见的术语:
Producing意味着无非是发送。一个发送消息的程序是一个producer(生产者)。一般用下图表示Producer:
Queue(队列)类似邮箱,依存于 RabbitMQ 内部。
虽然消息通过 RabbitMQ 在你的应用中传递,
但是它们只能存储在 queue 中。队列不受任何限制,
可以存储任何数量的消息—本质上是一个无限制的缓存。
很多 producers 可以通过同一个队列发送消息,
相同的很多 consumers 可以从同一个队列上接收消息。
一般用下图表示队列:
Consuming(消费)类似于接收。
consumer 是基本属于等待接收消息的程序。
一般使用下图表示 Consumer :
注意:producer(生产者), consumer(消费者),
broker( RabbitMQ 服务)并不需要部署在同一台机器上,
实际上在大多数实际的应用中,也不会部署在同一台机器上。
简单实例:
一个 producer 发送消息,一个接收者接收消息,
并在控制台打印出来。
如下图:
也就是说,在我们当前的例子中,
并没有用到 e