基于activeMQ和protoBuffer的java消息中间件的测试

前段时间刚测试的一个项目,其中两个系统之间需要实现增量数量的读取更新,即A系统获取到增量数据后通知B系统获取新增数据并进行后续的处理,为达到这一目标,最终设计为A数据存在增量数据至activeMQ,B系统从activeMQ中获取数据,为此,开发童鞋需实现一个通用的客户端工具包,方便两个系统发送和读取消息。

测试思路:

根据项目情况分析,该消息中间件的测试主要关注点是“生产者”、“消费者”两者针对消息的处理是否正常,即:

1.生产者能否将消息正确写入activeMQ

2.消费者能否从activeMQ中拉取出消息

3.写入的消息与拉取的消息是否能一一对应

由于消息的序列化格式使用的是protoBuffer,所以测试之前对其也进行了一下学习了解,主要关注:

1).proc文件格式的定义

在此文件中定义消息的格式字段,主要有三种类型:

required:必须赋值、不可为空

optional:可赋值也可不赋值

repeated:可重复任意次数,可将该关键字修饰的字段看成自动设置size的数组

需根据具体业务分析定义的proc文件中的字段是否符合真实业务的需要

2)proc文件的编译

将定义好的proc文件编译成需要的java文件,命令格式: protoc --proto_path=IMPORT_PATH --java_out=DST_DIR  path/to/file.proto

proto_path:需编译的proc文件所在路径

java_out:编译生成java文件的路径,也可在proc文件中定义:option java_package=.....

编译生成的java文件有三种类型:

SPEED:生成的代码效率高,但会占用更多的空间

CODE_SIZE:与SPEED相反

LITE_RUNTIME:生成的代码效率高、占用空间少,但是要牺牲反射功能(这一点不太理解)

可在proc文件中对设置上述三项:option optimize_for=

上述准备工作都就绪以后,便可开始测试:

1.根据proc生成需要的java类,上述3个类型都需生成一份

2.模拟生产者调用开发提供的公共客户端,设置生产者数据并发送到activeMQ中(调用3种类型的java文件,即上面提到的SPEED、CODE_SIZE、LITE_RUNTIME)

3.模拟消费者调用开发提供的公共客户端,从activeMQ中拉取数据并解析(调用3种类型的java文件,即上面提到的SPEED、CODE_SIZE、LITE_RUNTIME)

4.验证生产者数据与消费者拉取到的数据一致

5.上述操作批量执行

测试结果:提供的客户端只能实现SPEED一种java文件定义格式的生产和消费,其他两种会出现异常!

时间: 2024-10-13 09:25:07

基于activeMQ和protoBuffer的java消息中间件的测试的相关文章

Java消息中间件的概述与JMS规范

为什么需要使用消息中间件 在介绍消息中间件之前,我们先来看一个故事: 老王的睡前故事: 在很久很久以前,小明隔壁有个姓王的邻居,姑且就叫隔壁老王吧.隔壁老王有个大女儿,名叫王兰花秀丽,秀丽从小就爱听老王讲睡前故事,每晚在入睡前都要老王讲了睡前故事才能睡的得着.但某一天秀丽到了外地去上大学,老王为了能给秀丽讲故事,只能通过打电话的方式进行,如下: 但是有时候可能由于秀丽的手机信号不好或者没电等情况,导致老王只能不停的联系,直到电话打通为止.老王内心:我能怎么办,我也很绝望啊.虽然秀丽可能会比较晚才

Java消息中间件--初级篇

一. 为什么使用消息中间件? 假设用户登录系统   传统方式 用户登录  调用短息服务   积分服务  日志服务等各种服务  如果短息服务出现问题就无法发送短信而且用户登录成功必须所有调用全部完成返回给用户登录系统一条用户登录成功信息.从整体业务上讲  用户只是要登录系统  并不关心短信服务  日志服务怎么样就想登录成功就好  这种操作让用户等待了时间. 2)通过消息中间件解耦服务调用 用户登录系统会将登录消息发送给消息中间件  ---消息中间件会将用户登录消息异步一条一条推送给---短息服务 

第一篇博客——基于数组的优先队列(java版)

看过园子里和CSND上那么多大牛精彩的博客后,早就按捺不住想亲手写上几篇.奈何每次坐在电脑前准备敲字的时候,立马赶到浑身不自在,无从下手.实在是因为自高考之后,大学以来,本人几乎就再没动笔写过一篇文字,写作水平退化实在严重.今天鼓起勇气开始写作博客,一方面希望通过多写慢慢地找回写作的感觉,一方面也希望通过博客和大家多多交流,共同进步. 既然是第一次试手,就写个简单易懂的内容——优先队列. 话不多说,先上代码. 1 /** 2 * @author Mr Left 3 * @version 1.0

tomcat dbcp 基于jndi配置时出现java.sql.SQLException: Already closed

最近观察生产环境发现一个现象,一段时间不操作,再重新操作时,数据库连接第一次会出现:java.sql.SQLException: Already closed.,如下: 数据源是用tomcat dbcp 基于jndi配置管理的,查了下,如下: 原因: You're probably running into the fact that MYSQL closes connections  which have been open "too long". Probably if you m

atitit.基于虚拟机的启动器设计 --java 启动器 java生成exe

atitit.基于虚拟机的启动器设计 --java 启动器   java生成exe exe4j   vs  nativej 1. step1读取配置文件 1 1.1. regular mode   .. allINone exe mode 1 1.2. gene exe dir cfg 3 2. jre 目录配置and搜索 3 3. -classpath    -Djava.ext.dirs  jar and native dll配置 5 4. main class 配置 6 5. 其他的 6

MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)

最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求.以下是在利用网上资源.与同事探讨下,完成的代码. 首先我们需要有定义好的实体类.以下是截取了项目中用到的部分代码. 1 public class QyggDocuments implements java.io.Serializable { 2 3 private static final long serialVersionUID = -2543382529255041149L; 4 5 private Stri

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

基于SSM的健身俱乐部管理系统-java健身俱乐部管理系统javaweb健身房管理系统

基于SSM的健身俱乐部管理系统-java健身俱乐部管理系统javaweb健身房管理系统 1.包含源程序,数据库脚本.代码和数据库脚本都有详细注释.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善开发环境:Eclipse ,MYSQL,JDK1.7,Tomcat 7涉及技术点:MVC模式.SpringMvc.Mybatis.Spring.HTML.JavaScript.CSS.JQUERY.DWR.Ajax等系统采用Mybatis框架实现ORM对象关系映射,前台JSP实现,后台spring

JAVA Callback效率测试

在最近的联网电商项目中,想要实现单个web容器内的支付请求,全部能够统一宏观上同步,实现粒度上面异步,找来找去,没有相关方面的框架或者方案,于是最后基于现实场景,打算使用Java callback 的多线程方式,假象伪并发量为100000 /**  *   * @author gyx  *  */ public class A { private double  id = 0; public A(double  id) { this.setId(id); } public double  get