我们的消息交换系统要有一个向 OPENFIRE 发送数据的接口,做为我们系统消息传入软交换系统的入口。看了不少源码,总结出有三个解决方案:
1、增加一个 module,启动一个 WEBSERVICE 接口,然后向 internal component 里增加一个子域名,实现一个 component 接口的消息处理类,用于答复自有消息。当自有消息发过来时,把发送人设置为此子域名,然后把消息交给 RoutingTable 去处理;消息回复时就可以直接发回到 component 里了。
2、自己在 JETTY 中启动一个 WEBSERVICE 接口,接收我们系统,在 WEB 容器中调用 RoutingTable 发送数据。这种方式当回复消息时只能在 RoutingTable 中硬编码,把特定消息交给一个特殊程序去处理。
3、我们系统以外部 component 方式连接到 component 上,在 RoutingTable 中注册一个子域,以 component 协议给 openfire 系统发消息。消息回复是 RoutingTable 会自动发给这个 component。
以上三种方中,第2种对系统改造大,对原系统的侵入也大,不予采用。第一种方式和第二种差不多,都是以模块方式接入,但第一种需要另外开发 webservice 接口。第二种需要写一个 component。开发量差不多。
再经过我们查找资料发现,在 openfire 源码库有已经写好的外部 component 的示例程序,名字叫 tinder,在openfire 的 SVN 中就可以下载到。
再根据我们的需求比较1和3方案。我们的系统有40多台机器做为消息来源,这些机器是对等的,也就是它们必须为同一子域。消息有两种类型,IQ 和 message,IQ 必须哪台机器发的请求,答复还要再回到这台机器上去。Message 的请求可以回复到任意一台机器。
于是查看两个方案是否能满足此需求,改造量有多大。读代码和测试中发现,方案1不能原生实现此功能,必须自己实现这种特殊的需求,比如给40多台消息来源机每台起一个名字,在消息回复时根据名字发到不同的机器;方案3本来以为连接必须注册为一个唯一域名,后来读代码发现,在 component 登录时就可以指定是否支持多连接,也就是多个 component 共用一个域名,openfire 在有消息发给此子域时,会自动选择不同的 componet 发送。这样的话 IQ 的回复那不胡乱找个机器回复了!?
经过测试发现,OPENFIRE 的 IQ 回复没有乱回,而是会回到发送IQ的那台机器。很是奇怪。读代码发现,原来它在收到 IQ 消息时会把 IQ 的消息 ID 保存一个列表,当有 IQ 回复时,会根据 ID 查找是哪个连接发的请求,回复消息再发还给它。真不错。那我们的需求就全部解决了。
方案3成了我们的正式解决方案。
分享到:
相关推荐
MX Component 4 是一款在IT领域中用于软件开发的组件库,主要面向.NET Framework环境,提供了丰富的用户界面控件和功能强大的开发工具。这个安装包是MX Component 4的完整版本,包含了所有必要的文件和资源,旨在...
### MX Component 4.16S 软件概述 MX Component 4.16S 是三菱电机为方便用户在 C#、VB.NET 和 C++ .NET 等开发环境中与三菱 PLC 进行通信而提供的官方上位机通讯中间件。通过调用此软件中的 DLL 文件,开发人员可以...
#### 一、ComponentOne简介 ComponentOne是一家专注于为.NET开发者提供高质量控件的软件公司。其产品线覆盖了WinForms、WPF、ASP.NET Web Forms、ASP.NET MVC、UWP等多个.NET平台。这些控件不仅功能强大、性能卓越...
ComponentOne2011破解版 ComponentOne Studio是美国ComponentOne公司开发的控件系列产品名,支持WinForms、WPF、ASP.NET、Silverlight、iPhone、Mobile和ActiveX等7个开发平台。 ComponentOne Studio基于最新的...
在使用ESP32进行项目开发时,常常需要自定义组件(component)来满足特定的需求。本篇文章将深入探讨如何在ESP-IDF(ESP32的集成开发框架)中添加自己的component,以便更好地管理和组织代码。 首先,了解ESP-IDF的基本...
MX Component3.0是一款在IT行业内广泛使用的组件库,它为开发者提供了丰富的UI控件和功能模块,大大提升了开发效率,特别是在构建企业级应用时。这个"MX Component3.0 安装包"包含了所有必要的文件,使得用户能够...
MX Component是C#环境下连接三菱PLC( Programmable Logic Controller)的一种重要工具,它提供了丰富的API和类库,便于开发者在Windows Forms应用中实现与三菱PLC的数据交互。本实例集是官方提供的,经过实际测试,...
ComponentOne Studio for ActiveX 目前包括以下产品: SizerOne 通过这一4合1的构建集合ezai您的应用程序中增加缩放、标签和parsing的功能。 SizerOne是VS-OCX的最新版,包含两个缩放构件,可处理简单和复杂的缩放...
MXComponent是一款专为VB(Visual Basic)开发的组件,用于实现上位机与三菱PLC(可编程逻辑控制器)之间的高效通信。这个64位实例是针对那些在64位操作系统下运行VB程序并需要与三菱PLC进行交互的开发者设计的。在...
**三菱PLC通讯组件MX Component Version 4编程手册与操作手册概述** 三菱PLC通讯组件MX Component Version 4是一款强大的工具,专为简化与三菱PLC(可编程逻辑控制器)和运动控制器之间的通信而设计。它包含Active ...
《TMS Component Pack v9.2.4.0 D10.4 Sydney——Delphi开发的强大工具》 TMS Component Pack v9.2.4.0 D10.4 Sydney是一款由知名软件开发公司TMS Software精心打造的Delphi开发组件集合。这款组件包专为Delphi和...
MX Component Version 4是一款强大的软件开发工具,它为程序员提供了高效、灵活且可扩展的组件库,适用于构建各种应用程序。本编程手册将深入探讨MX Component Version 4的核心特性和使用方法,帮助开发者充分利用其...
《C#与三菱MXComponent通讯协议详解》 在现代工业自动化领域,计算机与PLC(可编程逻辑控制器)之间的通信是至关重要的。本篇将详细阐述如何使用C#编程语言与三菱的MXComponent软件进行通讯,帮助开发者实现高效、...
MX Component V4是一款便捷的工具,主要用于实现个人计算机与可编程控制器间的通信。本手册详细介绍了MX Component的操作方式及其安全注意事项,下面将根据手册内容,详细解读MX Component的关键知识点。 ### 一、...
npm install vue-class-component vue-property-decorator --save-dev 一梭子直接干; 其次,咱来说说它们的区别与联系: vue-property-decorator社区出品;vue-class-component官方出品 vue-class-component提供了...
Learning Web Component Development 中文译名《Web Component实战 》 探索PolymerJS、Mozilla Brick、Bosonic与ReactJS框架 此为英文版
ComponentOne Studio 2010 V3 是一个由 GrapeCity 公司开发的全面的.NET开发工具集。这个工具包提供了大量的控件和组件,旨在帮助开发者构建高效、功能丰富的Windows Forms、ASP.NET以及WPF应用程序。在描述中提到的...
"component cascade tool 7.0.zip" 是一个用于微波仿真分析的软件工具包,主要功能在于级联多个微波组件以评估整个系统的性能。在微波工程领域,这种工具对于设计和优化通信、雷达系统以及其他微波技术应用至关重要...
《Mx_Component_Install在Windows 7 x86与x64环境下的安装指南》 "Mx_Component_Install.zip" 是一个专为Windows 7操作系统设计的组件安装包,适用于32位(x86)和64位(x64)系统。这个压缩包内含的“Mx_Component_...
MX Component是三菱电机公司开发的一种组件,旨在实现MX系列PLC与上位机之间的通信。本文将详细介绍MX Component的设置方法以及如何在C#环境下通过LabVIEW软件调用该组件进行通信。 首先,用户需要完成MX Component...