ActiveMQ是个很强大的东西,但是对于我的这种应用场景,我始终没想明白该如何应用,在这里先介绍一下我的应用场景:
在一个分布式应用系统中,有多个进程(都是用java开发的系统)间需要通信
进程有A,B,C1,C2,C3,C4,D,F1,F2,F3,F4可能还要扩展更多个进程,目前各进程相互通信的相互关系如下
A<------->B,B<------->C, socket方式通信
C<------->M1,C<------->M2,C<------->M3,C<------->M4, RMI方式通信
A<------->D, socket方式通信
D<------->F1,D<------->F2,D<------->F3,D<------->F4, socket方式通信
(注:A<------->B表示A进程和B进程之间相互通信)
目前的做法是,使用了两种通信方式,但是这样作的弊病很大,首先是每个进程里都很多关于通信的代码,其次是如果要增加新的
协议改很多东西,非常不便于扩展,进程通信的代码和业务代码耦合非常紧密。
例如:如果M3要发信息给A必须经过C和B;A和Fn也没法直接通信,必须经过D,这种做法实在非常恶心
这些都是以前的老系统,我感觉这个系统的进程通信设计的非常不好。
我的新思路如下:
1.定义一个消息中心服务进程
2.所有需要通信的进程,必须有一个唯一的名称,然后注册到消息中心服务进程,所有需要通信的消息都发送到消息中心服务进程,然后该消息被转发给目标进程
3.各个进程的地位是平等的,打破上下级的关系,当任意两个进程需要通信时只需要知道对方的名称就可以给对方发消息
4.定一个进程通信包,在这个包里提供和中心消息服务进程通信的所有功能,并对外提供接口(注册,接收消息,发送消息),相当于一个API,其他程序如果想要在
代码中增加进程通信的功能就导入这个jar包,调用相应的接口就可以收发消息,使得进程通信功能和业务代码耦合降到最低。
5.重新定义数据通信协议,比如:
我定义10001的消息格式是:
{sender:"xProcessor",receiver:"Adapter_01",msgcode:"10001",fieldnames:"f1,f2,f3",fieldtype:"int,string,float",f1:"10",f2:"xxxx OK",f3:"49.7321"}
各字段说明如下:
sender:发送者的进程名称,人为定义的
reciver:接收者的进程名称,人为定义的
msgcode:消息编号,我要定义很多消息,因此可以有很多个编号
fieldnames:字段名列表
fieldtype:字段类型列表
f1:承载数据的字段
f2:承载数据的字段
f3:承载数据的字段
我定义10002的消息格式是:
{sender:"xProcessor",receiver:"Adapter_01",msgcode:"10002",fieldnames:"f1,f2,f3,f4",fieldtype:"string,string,string,string",f1:"v1",f2:"v2",f3:"v3",f4:"v4"}
诸如此类,我就可以很轻松的定义很多种不同的消息,这样作的好处是,1.消息通道和消息格式本身无关,2.只有发送进程和目标接收进程关系消息具体格式
我觉得我的想法有一定的可行性,并且想尽量借助并使用ActiveMQ来实现,但是我对ActiveMQ不是很熟,
我知道ActiveMQ中有订阅和发布两种方式,但是不明白如果用ActiveMQ实现上面的我这种做法,应该如何来设计,希望大家能一起讨论一下
分享到:
相关推荐
来自于csdn,,由火龙果软件Anna编辑、推荐。上面提到过消息中间件,那么什么是消息中间件呢?消息中间件利用高效可靠的消息...但在大型分布式应用中,系统间的RPC交互繁杂,一个功能背后要调用上百个接口并非不可能,
1) 服务的注册与发现 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
JCarder 是一个用来查找多线程应用程序中一些潜在的死锁,通过对 Java 字节码的动态分析来完成死锁分析。 Java的Flash解析、生成器 jActionScript jActionScript 是一个使用了 JavaSWF2 的 Flash 解析器和生成器。...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...
lang-java【技术体系】/ JAVA核心: 多线程并发编程、网络通信(Netty)、JVM虚拟机底层原理/ Linux服务器: 文件系统、基础命令、用户管理、进程管理、SHELL脚本编程/ 分布式数据存储; 关系型数据库(MySQL)、...