测试环境搭建及生产者消费者测试

测试环境搭建及生产者消费者测试

2021-05-10 14:36:27

前言:本文会使用java client对rabbitmq做一个测试,测试前会先安装调试jdk、eclipse和maven。

一、环境准备

1.软件版本选择

eclipse版本及与jdk对应关系如下:

https://wiki.eclipse.org/Eclipse/Installation

1.png

查看eclipse软件版本

2.png

查看eclipse与jdk对应关系

本文jdk版本为JAVA8,eclipse版本为4.16,eclipse安装前需先安装jdk,否则报错:

3.png

2.jdk 8安装

2.1jdk下载

下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

4.png2.2运行安装包

下载安装包后运行

5.png

下一步

6.png

下一步,选择默认路径'C:\Program Files\Java\jdk1.8.0_281'

7.png

安装中

8.png

选择默认路径

9.png

安装

10.png

安装完成

11.png

3.jdk配置

3.1打开‘环境变量’

12.png

3.2新建环境变量JAVA_HOME

13.png

新建环境变量CLASSPATH

变量值:'.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar'

14.png

3.3编辑PATH

双击Path,点击新建,添加“%JAVA_HOME%\bin”

15.png

3.4验证并查看jdk版本

使用cmd命令查询jdk版本

16.png

17.png

4.eclipse安装配置

4.1下载软件

下载链接:https://www.eclipse.org/downloads/packages/release

这里选择4.16版本,对应时间是2020-06

18.png

将下载的安装包eclipse-java-2020-06-R-win32-x86_64.zip解压到安装目录

19.png4.2软件安装

双击eclipse.exe运行安装程序,也可以把eclipse.exe发送至桌面作为快捷方式方便后面启动

20.png

设置工作路径,安装

20.png

进入欢迎界面

21.png

4.3汉化

下载链接:https://download.eclipse.org/technology/babel/babel_language_packs/latest/index.php

这里选择BabelLanguagePack-eclipse-zh_4.19.0.v20210327020002.zip,每一项分别对应各个功能模块

22.png

解压下载的语言包BabelLanguagePack-eclipse-zh_4.19.0.v20210327020002.zip并将解压后的两个目录移动到eclipse安装目录

23.png23-1.png

重启eclipse

24.png

发现已汉化

显示相关窗口

25.png显示console和搜索

25-1.png

4.4新建Hello World项目

26.png

项目名为Helloworld

27.png

下一步

28.png

完成并查看

29.png

新建包

30.png


包名为hello01

31.png

包创建成功

32.png

在包下面新建类

33.png

类名为Loong576,创建时勾选'public static void main(String[] args)'

34.png

类创建完成

35.png

编辑写程序

package hello01;

public class Loong576 {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        System.out.print("Hello World,I am loong576!");
    }

}

运行程序

36.png

37.png

控制台输出'Hello World,I am loong576!'

38.png

5.maven安装配置

5.1maven简介

Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。

5.2下载maven

下载地址:http://maven.apache.org/download.cgi

39.png


选择的maven版本为3.8.1,将下载的安装包apache-maven-3.8.1-bin.zip解压到目录D:\Maven\apache-maven-3.8.1

40.png

  • 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

41.png

将变量'%MAVEN%\bin'添加到Path

42.png5.4maven验证

验证maven是否配置正确

43.png


生成相关目录

运行命令mvn help:system,生成相关目录

44.png

5.5本地仓库查看

45.png

在目录C:\Users\My.m2\repository下会生成本地仓库,未来使用maven所自动下载的jar包会下载到这里。

5.6eclipse配置maven

'窗口'--'首选项'--'Maven'--'Installations'--'Add'

46.png

选择新增的maven并应用

47.png

修改settings.xml配置

48.pngmaven配置完成

二、RabbitMQ消息收发测试

1.新建maven project

使用快捷键'Ctrl+N'创建Maven Project

49.png

选择目录rabbitmq

50.png

类型选择'maven-archetype-quickstart'

51.png

Groupid为'com.my.maven',Artifact Id为'testmq'

52.png

maven project创建完成

53.png

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>

54.png

修改pom.xml,新增依赖代码

55.png

新引入依赖'amqp-client-5.12.0.jar'

3.运行maven项目

56.png

选择匹配项

57.png

确定

58.png

运行成功,console输出'Hello World!'

4.测试模型

为了对RabbitMQ有个直观的认识,用RabbitMQ来写一个hello world 的demo,在该demo中,我们将编写两个类,一个是生产者类,一个是消费者类,生产者类负责发送一个简单的message,而消费者类负责接收这个消息并且打印出来。

59.png

5.新建生产者

5.1新建生产者类

选中testmq,右键--新建--类

60.png

类名为Send

61.png

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: 消费者接口默认实现

查看运行前队列:

63.png

[root@ansible-tower ~]# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...

64.png

两种方式查看队列都为空

5.3运行Send代码

65.png

console输出Sent 'hello world',查看rabbitmq队列:

66.png

查看RabbitMQ的管理后台,发现队列中有一个叫做hello loong576的queue

67.png

命令方式也看到了该queue

6.新建消费者

6.1新建消费者类

选中testmq,右键--新建--类

68.png

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 / ...

69.png

消费者为空

6.3运行Recv代码

70.png

console输出Received 'hello world',查看RabbitMQ的管理后台

71.png

查看消费者

72.png

Recv.java类,用于接收消息,该接收消息的类一直保持运行的状态,以便监听消息的到来。

以上就是一个简单的生产者和消费者的例子,RabbitMQ在这个过程中充当了一个消息存储器的角色,它负责接收,分配消息,而发送,接收消息的工作由我们编程来实现。

各软件已上传云盘:https://pan.baidu.com/s/1sA5d6KqsWBdDEdBt5kJcog

提取码:fsn9

配置文件和代码已上传github:rabbitmq-test

@版权声明:51CTO独家出品,未经允许不能转载,否则追究法律责任


版权声明:
作者:WaterBear
链接:https://l-t.top/2072.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录