`
bluethink
  • 浏览: 97899 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

讨论:在分布式应用中基于ActiveMQ实现多进程通信

阅读更多

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实现上面的我这种做法,应该如何来设计,希望大家能一起讨论一下

 

分享到:
评论

相关推荐

    消息中间件在分布式系统中的作用介绍

    通过消息传递和消息排队模型,消息中间件可以在分布式环境下扩展进程间的通信,支持应用程序或组件之间进行可靠的异步通信,从而降低系统间的耦合度,提高系统的可扩展性和可用性。 在分布式系统中,消息中间件的...

    分布式服务框架原理与实践_李林锋pdf(带目录)

    2. **微服务架构**:书中可能详细介绍了微服务架构的概念,它是分布式服务的一种实现方式,将单一应用程序拆分为一组小的服务,每个服务运行在其自己的进程中,并且可以独立部署。 3. **服务发现**:在分布式环境中...

    分布式架构设计

    在这个领域,Netty作为一个高性能、异步事件驱动的网络应用程序框架,常被用于构建分布式架构中的通信层。 Netty是由JBOSS组织开发的一个开源项目,它为Java平台提供了高度可定制的网络通信框架。Netty的核心特性...

    java9分布式计算

    它定义了对象间通信的接口规范,使得不同系统间的对象可以像在同一个进程中那样协作。在大型分布式计算环境中,CORBA可以提供高效率和可扩展性,但其复杂性和学习曲线较高。 4. **企业级MQ(消息队列)**:在分布式...

    基于java游戏服务器框架,它是高可伸缩、分布式多进程的游戏服务器框架。.zip

    2. **分布式多进程**:在分布式多进程架构中,每个服务器进程负责特定的游戏逻辑或功能,如用户认证、游戏状态管理、聊天服务等。这种设计允许通过增加更多进程来提高处理能力,同时减少了单点故障的风险。Java的多...

    西安电子科技大学计算机分布式计算五次上机代码及报告

    在这些实验中,学生们可能需要设计并实现基于UDP的通信机制,使用RMI创建分布式服务,利用消息队列(如ActiveMQ)进行进程间的通信,以及编写MapReduce程序来处理大数据问题。通过这些实践,他们将深刻理解分布式...

    《分布式系统开发实战》-课件.zip

    9. **微服务架构**:将单一应用程序拆分为一组小型服务,每个服务都在自己的进程中运行,可以独立部署、扩展和升级。 10. **服务发现与注册**:如Eureka、Consul、Zookeeper等,用于服务之间的自动发现和注册,保持...

    消息中间件在分布式系统中的作用.pptx

    在基于Dubbo的分布式系统架构中,消息中间件有助于解耦各个服务间的调用。例如,在支付流程中,当交易服务完成支付操作后,可能会触发一系列后续服务的调用,如成本计算、商户计费、风控处理以及通知服务等。如果...

    ActiveMQ教程

    其核心概念是允许独立的应用程序在不同的系统中通过消息队列进行通信。 ### ActiveMQ核心功能和特点 - **遵循JMS和J2EE规范**:ActiveMQ提供JMS规范的完整实现,支持JMS 1.1中的所有功能,包括持久化、事务(XA消息...

    ActiveMQ技术研究要点

    ActiveMQ 是一款开源的消息中间件,它遵循Java Message Service (JMS) 规范,用于在分布式系统中高效地传输消息。在深入了解ActiveMQ之前,我们先来了解一下JMS的基本概念。 JMS(Java Message Service)是Java平台...

    分布式架构学习路线1

    分布式架构是一种将应用程序和服务分散在多个计算机节点上运行的系统设计模式,以提高系统的可伸缩性、容错性和性能。以下是对标题和描述中提到的分布式架构关键知识点的详细解释: 1. **负载均衡**: 负载均衡是...

    消息中间件ActiveMQ及Spring整合JMS.docx

    1. **进程间通信**:在分布式系统中,不同进程可以通过ActiveMQ进行通讯。 2. **解耦**:在大型企业中,不同开发团队可以通过MQ进行模块间通信,降低耦合度。 3. **异步处理**:在高并发场景下,利用MQ的异步特性...

    消息队列activemq学习笔记

    通过以上介绍,我们可以了解到ActiveMQ作为一款成熟且功能强大的消息中间件,在实际应用中的重要作用。无论是解决系统间耦合问题还是提高系统的性能和稳定性,ActiveMQ都是一个值得深入学习的技术。

    activeMQ Demo

    在同一个或不同的进程中,分别运行生产者和消费者程序,确保ActiveMQ服务器正在运行(默认端口61616)。生产者发送消息后,消费者将接收到并打印出消息内容。 6. **总结** 通过上述代码示例,我们可以看到C#与...

    C#,activemq,mq

    在IT行业中,消息队列(Message Queue)是一种重要的中间件技术,它允许应用程序之间通过异步通信进行数据交换。在本场景中,我们关注的是Apache ActiveMQ,一个开源且功能强大的消息中间件,以及如何使用C#语言进行...

    微服务架构的分布式事务解决方案演示

    微服务架构是指将单一应用程序分解为一组小的服务,每个服务运行在其独立的进程中,并通过轻量级机制(通常是HTTP资源API)进行通信。 #### 描述解读:“本文档主要介绍微服务架构的分布式事务解决方案” 描述部分...

    activemq-JMS 启动错误

    标题 "activemq-JMS 启动错误" 暗示了用户在尝试启动 Apache ActiveMQ 服务时遇到了问题,ActiveMQ 是一个流行的开源消息中间件,它使用 Java Message Service (JMS) API 来处理异步通信。下面将详细讨论 ActiveMQ、...

Global site tag (gtag.js) - Google Analytics