测试环境搭建及生产者消费者测试
测试环境搭建及生产者消费者测试
前言:本文会使用java client对rabbitmq做一个测试,测试前会先安装调试jdk、eclipse和maven。
一、环境准备
1.软件版本选择
eclipse版本及与jdk对应关系如下:
https://wiki.eclipse.org/Eclipse/Installation
查看eclipse软件版本
查看eclipse与jdk对应关系
本文jdk版本为JAVA8,eclipse版本为4.16,eclipse安装前需先安装jdk,否则报错:
2.jdk 8安装
2.1jdk下载
下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
2.2运行安装包
下载安装包后运行
下一步
下一步,选择默认路径'C:\Program Files\Java\jdk1.8.0_281'
安装中
选择默认路径
安装
安装完成
3.jdk配置
3.1打开‘环境变量’
3.2新建环境变量JAVA_HOME
新建环境变量CLASSPATH
变量值:'.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar'
3.3编辑PATH
双击Path,点击新建,添加“%JAVA_HOME%\bin”
3.4验证并查看jdk版本
使用cmd命令查询jdk版本
4.eclipse安装配置
4.1下载软件
下载链接:https://www.eclipse.org/downloads/packages/release
这里选择4.16版本,对应时间是2020-06
将下载的安装包eclipse-java-2020-06-R-win32-x86_64.zip解压到安装目录
4.2软件安装
双击eclipse.exe运行安装程序,也可以把eclipse.exe发送至桌面作为快捷方式方便后面启动
设置工作路径,安装
进入欢迎界面
4.3汉化
下载链接:https://download.eclipse.org/technology/babel/babel_language_packs/latest/index.php
这里选择BabelLanguagePack-eclipse-zh_4.19.0.v20210327020002.zip,每一项分别对应各个功能模块
解压下载的语言包BabelLanguagePack-eclipse-zh_4.19.0.v20210327020002.zip并将解压后的两个目录移动到eclipse安装目录
重启eclipse
发现已汉化
显示相关窗口
显示console和搜索
4.4新建Hello World项目
项目名为Helloworld
下一步
完成并查看
新建包
包名为hello01
包创建成功
在包下面新建类
类名为Loong576,创建时勾选'public static void main(String[] args)'
类创建完成
编辑写程序
package hello01; public class Loong576 { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.print("Hello World,I am loong576!"); } }
运行程序
控制台输出'Hello World,I am loong576!'
5.maven安装配置
5.1maven简介
Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
5.2下载maven
下载地址:http://maven.apache.org/download.cgi
选择的maven版本为3.8.1,将下载的安装包apache-maven-3.8.1-bin.zip解压到目录D:\Maven\apache-maven-3.8.1
bin目录: 该目录包含了mvn运行的脚本,这些脚本用来配置java命令,准备好classpath和相关的Java系统属性,然后执行Java命令。
boot目录: 该目录只包含一个文件,该文件为plexus-classworlds-2.5.2.jar。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更加丰富的语法以方便配置,Maven使用该框架加载自己的类库。
conf目录: 该目录包含了一个非常重要的文件settings.xml。直接修改该文件,就能在机器上全局地定制Maven的行为,一般情况下,我们更偏向于复制该文件至~/.m2/目录下(~表示用户目录),然后修改该文件,在用户范围定制Maven的行为。
lib目录: 该目录包含了所有Maven运行时需要的Java类库,Maven本身是分模块开发的,因此用户能看到诸如maven-core-3.0.jar、maven-model-3.0.jar之类的文件,此外这里还包含一些Maven用到的第三方依赖如commons-cli-1.2.jar、commons-lang-2.6.jar等等。
5.3配置环境变量
参考JAVA_HOME环境变量配置,新增环境变量MAVEN
将变量'%MAVEN%\bin'添加到Path
5.4maven验证
验证maven是否配置正确
生成相关目录
运行命令mvn help:system,生成相关目录
5.5本地仓库查看
在目录C:\Users\My.m2\repository下会生成本地仓库,未来使用maven所自动下载的jar包会下载到这里。
5.6eclipse配置maven
'窗口'--'首选项'--'Maven'--'Installations'--'Add'
选择新增的maven并应用
修改settings.xml配置
maven配置完成
二、RabbitMQ消息收发测试
1.新建maven project
使用快捷键'Ctrl+N'创建Maven Project
选择目录rabbitmq
类型选择'maven-archetype-quickstart'
Groupid为'com.my.maven',Artifact Id为'testmq'
maven project创建完成
2.引入java client
RabbitMQ针对不同的开发语言(java,python,c/++,Go等等),提供了丰富对客户端,方便使用。就Java而言,可供使用的客户端有RabbitMQ Java client、RabbitMQ JMS client、apache的camel-rabbitmq、以及Banyan等。
RabbitMQ的Java客户端使用com.rabbitmq.client作为顶级包名,关键的接口和类后面会列举介绍。
对于Maven工程,pom.xml中加入以下依赖即可引入RabbitMQ的Java客户端
<dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.12.0</version> </dependency>
修改pom.xml,新增依赖代码
新引入依赖'amqp-client-5.12.0.jar'
3.运行maven项目
选择匹配项
确定
运行成功,console输出'Hello World!'
4.测试模型
为了对RabbitMQ有个直观的认识,用RabbitMQ来写一个hello world 的demo,在该demo中,我们将编写两个类,一个是生产者类,一个是消费者类,生产者类负责发送一个简单的message,而消费者类负责接收这个消息并且打印出来。
5.新建生产者
5.1新建生产者类
选中testmq,右键--新建--类
类名为Send
5.2Send代码
package com.my.maven.testmq; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; public class Send { private final static String QUEUE_NAME = "hello loong576";//队列名 public static void main(String[] argv) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("172.16.7.110");//服务器ip factory.setPort(5672);//端口 factory.setUsername("admin");//登录名 factory.setPassword("Admin123!");//密码 Connection connection=factory.newConnection(); 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] Sent '"+message+"'"); channel.close(); connection.close(); } }
包com.rabbitmq.client:客户端api定义,提供了接口和类定义AMQP中connection,channel,queue,exchange等核心对象,主要接口和类:
Channel: AMQP 0-9-1 Channel对象,表示一个连接通道,提供了大多数AMQP操作,如创建队列、交换器、绑定等
Connection: AMQP 0-9-1 Connection,表示一个客户端连接
ConnectionFactory: Connectiong工厂
Consumer: 消息消费者接口
DefaultConsumer: 消费者接口默认实现
查看运行前队列:
[root@ansible-tower ~]# rabbitmqctl list_queues Timeout: 60.0 seconds ... Listing queues for vhost / ...
两种方式查看队列都为空
5.3运行Send代码
console输出Sent 'hello world',查看rabbitmq队列:
查看RabbitMQ的管理后台,发现队列中有一个叫做hello loong576的queue
命令方式也看到了该queue
6.新建消费者
6.1新建消费者类
选中testmq,右键--新建--类
6.2Recv代码
package com.my.maven.testmq; import java.io.IOException; 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.AMQP; import com.rabbitmq.client.Envelope; public class Recv { private final static String QUEUE_NAME = "hello loong576";//队列名 public static void main(String[] argv) throws Exception { //下面的配置与生产者相对应 ConnectionFactory factory=new ConnectionFactory(); factory.setHost("172.16.7.110");//服务器ip factory.setPort(5672);//端口 factory.setUsername("admin");//登录名 factory.setPassword("Admin123!");//密码 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"); //defaultConsumer实现了Consumer,我们将使用它来缓存生产者发送过来储存在队列中的消息。当我们可以接收消息的时候,从中获取。 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 + "'"); } }; //接收到消息以后,推送给RabbitMQ,确认收到了消息。 channel.basicConsume(QUEUE_NAME, true, consumer); } }
运行前查看消费者信息
[root@ansible-tower ~]# rabbitmqctl list_consumers Listing consumers in vhost / ...
消费者为空
6.3运行Recv代码
console输出Received 'hello world',查看RabbitMQ的管理后台
查看消费者
Recv.java类,用于接收消息,该接收消息的类一直保持运行的状态,以便监听消息的到来。
以上就是一个简单的生产者和消费者的例子,RabbitMQ在这个过程中充当了一个消息存储器的角色,它负责接收,分配消息,而发送,接收消息的工作由我们编程来实现。
各软件已上传云盘:https://pan.baidu.com/s/1sA5d6KqsWBdDEdBt5kJcog
提取码:fsn9
配置文件和代码已上传github:rabbitmq-test
@版权声明:51CTO独家出品,未经允许不能转载,否则追究法律责任