测试环境搭建及生产者消费者测试
测试环境搭建及生产者消费者测试
前言:本文会使用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独家出品,未经允许不能转载,否则追究法律责任
