17

维基百科定义XMPP为:

...一种基于 XML 的面向消息的中间件的开放标准通信协议。

xmpp.org 定义XMPP为:

可扩展消息传递和存在协议 (XMPP) 是一种用于实时通信的开放 XML 技术,它为广泛的应用程序提供支持。

尽管我确信这两个定义都非常准确,但它们并没有告诉我我——一个 Java 开发人员——实际上可以用 XMPP 做什么!

例如,我听说 XMPP 可以与面向消息的中间层 (MOM) 一起使用。怎么会这样?XMPP 能否以某种方式与我的 Apache Camel 路由、我的 ESB 或一些 SOA 实现集成以提供更好/更快/更健壮的业务层?如果是这样,如何?!?!

非常感谢对 XMPP 的良好的 King's-English 解释以及一些实际示例(最好以 MOM 为中心)。提前致谢!

4

5 回答 5

17

XMPP 可用于广泛的基于消息传递的应用程序。基本上,它提供了可用于构建基于 XML 的消息传递应用程序的核心服务。它基于分散的客户端-服务器架构,并利用长寿命的 TCP 连接进行通信......

核心服务包括...

  • 通道加密、身份验证、状态、联系人列表、一对一消息、多方消息、通知
  • 服务发现、能力广告、结构化数据格式、工作流管理、点对点媒体会话

教科书用例...

  • 即时消息(使用状态、联系人列表、一对一消息)
  • 群聊、游戏、系统控制、地理定位、中间件/云计算、数据联合
  • bots(天气、数据库接口、系统监控)

消息传递模式/模式...

  • 点对点消息用于发送到特定的接收者
  • 多用户消息传递用于向一组接收者发送消息
  • 当有大量事件并且系统对不同的事件子集感兴趣时,使用发布/订阅支持。发布者将事件放入主题中,订阅者指示他们感兴趣的主题。这将发布者/订阅者解耦并允许可扩展的实时消息传递。有关详细信息,请参阅这篇文章:http ://www.isode.com/whitepapers/xmpp-pubsub.html

部署方法...

  • XMPP 用户 - 以普通用户身份连接并响应发给该用户的请求
  • XMPP 服务器插件 - 作为服务器插件架构的一部分部署
  • XMPP 组件 - XMPP 服务器外部的服务,连接并像插件一样工作

Java 集成

  • Smack API - 一个纯 Java 库,它可以嵌入到您的应用程序中,以创建从完整的 XMPP 客户端到简单的 XMPP 集成(例如发送通知消息和启用状态的设备)的任何内容。
  • Camel XMPP - 一个 Camel 组件,允许在 Camel 路由中与 Smack API 集成

对于您的具体问题“可以在 SOA/中间件中使用吗?”....

  • 是的,它可用于通过 XML 消息传递和 XMPP API 将应用程序连接在一起
  • 它是否是最好的技术选择在很大程度上取决于需求
  • 一个很好的用例,交互式系统监控/管理......这里有一些其他的例子

此外,XMPP 与 Camel 的集成也很简单。有关与 Google Talk 服务器连接的基本示例,请参阅此camel-xmpp 单元测试。此外,Camel 的框架允许您构建应用程序并轻松更换不同的消息传递技术(JMS、STOMP、mina 等)。

于 2012-04-09T23:29:37.617 回答
4

XMPP 是一种开放且可扩展的实时通信标准。

XMPP 带有一个在其rfc中定义的核心,它描述了用于进行即时消息传递和交换存在信息的基本协议。然而,XMPP 真正的亮点在于它的可扩展性:XMPP 定义了构建块(存在、消息和 iq 节)来创建通信协议。这些通常以扩展的形式出现。可以在此处找到当前可用的标准扩展列表。其中最重要的通常适用于所有流行的 XMPP 服务器。正是这种可扩展性使 XMPP 适合作为面向消息的中间件。

让我以Publish-Subscribe为例,这是中间件的典型模式,一旦您离开带有一些简单消息传递就足够的实体的场景,它就成为必需品。PubSub 用于实体或生产者生成要由其他实体消费者消费的信息的情况。通常,信息被写入消费者订阅的节点。订阅后,他们会在添加/更新/删除项目时收到通知。PubSub 可以优雅地涵盖大量的用例,从排队长期运行的工作并让工人处理它们,到微博。XMPP 有一个非常健壮且广泛可用的扩展,可以以标准方式处理 PubSub,在XEP-0060并提供开箱即用的工作流程来处理发布、订阅、通知和安全性。查看 XEP 中的用例会让您对整个事情的简单性有所了解。

现在,虽然大多数用例都通过使用(或滥用)现有的标准扩展来涵盖,但最终您可能需要在其他地方没有涵盖的一点额外的自定义协议。使用您选择的语言,您可以编写定义您自己的协议的XMPP 组件。然后,您将组件连接到您正在运行的 XMPP 服务器,并通过使用简单的命名空间让服务器知道您可以处理什么样的消息,并让服务器向连接到它的客户端宣传您的协议功能。您可以做到多么简单或复杂,这没有止境。缺乏更好的例子,但可能足以说明,here是我编写的一个组件,它利用 XMPP 在 Plone CMS 中进行实时协作编辑(类似于 Google 文档)。虽然细节可能会变得复杂,但我认为查看该页面上的“协议规范”会给你一个想法。

最后,关于@boday 提到的 Java 特定库,周围有一些库可以轻松上手以及 Apache Camel 集成(尽管据我所知,它只做简单的消息传递)。但请记住,在了解 XMPP 的工作原理以及能够超越使用现有库的能力方面的投资确实是值得的,并且可以带来极其强大且简单的集成。

于 2012-04-10T15:28:19.737 回答
4

我可以开始使用 Google 组合来自互联网上各种来源的信息(关键字:XMPP Java MoM 示例),重写(甚至复制)XMPP 的定义,但我当然不会这样做。太多了。我也没有可供您使用的示例。

下面我将列出我发现最有趣的链接,以便您开始阅读并获得有关该主题的更多知识。

1) http://www.xmpp.org/ 这可能是最好的起点。从左到右和从上到下浏览菜单。这就是我所做的。该站点列出了服务器、客户端和库,因此您应该能够通过这种方式找到所需的示例。

2) http://www.ibm.com/developerworks/webservices/library/x-xmppintro/index.html 清晰的文章,其中也提到了MoM。没有 Java 示例,只有 Ruby。

3) http://fyi.oreilly.com/2009/05/what-c ​​an-you-do-with-xmpp.html 也许你应该买这本书?文章中没有例子。

4) http://kirkwylie.blogspot.com/2008/07/real-mom-is-hard-lets-use-xmpp.html 有趣的文章,最后一行基本上说:如果可以使用 AMQP 或 JMS,为什么还要使用 XMPP ?

我希望这可以帮助你找到你需要的东西。

于 2012-04-10T15:45:07.710 回答
0

让我简单介绍一下 XMPP 是什么?

  • XMPP(可扩展消息传递和存在协议)
  • 它是一种实时通信协议。
  • 第一个基于 XMPP 的 IM 服务是 Jabber.org
  • 一个 XMPP 绑定是BOSH。其他包括 TCP 和WebSocket
  • BOSH 是“同步 HTTP 上的双向流”,一种通过超文本传输​​协议 (HTTP) 进行双向通信的技术。
  • BOSH 模拟了传输控制协议 (TCP) 中熟悉的许多传输原语。对于需要“推”和“拉”通信的应用程序,BOSH 比大多数其他基于 HTTP 的双向传输协议和称为 AJAX 的技术显着提高带宽效率和响应速度。
  • BOSH 通过长轮询实现了这种效率和低延迟。

XMPP 是如何工作的?

XMPP 通过实现长轮询来实现低延迟。

什么是正常轮询长轮询

正常投票:

在此处输入图像描述

考虑使用普通轮询的旧聊天应用程序。这里图表的顶部表示客户端。底部表示服务器端。让超时为 5 分钟。

Client asks the server : " Is there any new message for me ?"
Server Responds : "No ! "

                   After 5 min

Client asks the server : " Is there any new message for me ?"
Server Responds : "No !"

                  After 1 min

Client Receives a message

                  After 4 min

Client asks the server : " Is there any new message for me ?"
Server Responds : "Yes! " + message.

长轮询

在此处输入图像描述

图的顶部是客户端。底部是服务器。

Client asks the server : " Is there any new message for me ?"
Server Answers : "No ! But you may soon receive a new message, so let me just hold your client state for 5 min in the server."

                  After 5 min

Server Responds : "No !"
Client asks the server : " Is there any new message for me ?"
Server Answers : "No ! But you may soon receive a new message, so let me just hold your client state for 5 min in the server."

                  After 1 min

Client Receives a message
Server Responds : "Yes! " + message.

您可以清楚地看到,通信发生的瞬间。

您可以在此处阅读有关 XMPP 的更多信息

如果您想建立自己的 XMPP 服务器,请阅读本文

于 2016-05-04T06:39:01.027 回答
-2

XMPP 基本上是聊天室客户端与聊天服务器交谈的协议。Camel 确实允许您与 XMPP 集成,以便您可以从这种机制中消费或生成消息http://camel.apache.org/xmpp.html

当您开始谈论业务层、ESB、SOA 等和 MOM 时,您可能正在寻找一种支持点对点和发布订阅消息传递的消息传递机制。您可能还在考虑诸如保证消息传递、高可用性和细粒度安全性等问题。您不会从将文本消息读取和写入聊天服务器的机制中获得这些信息。像 ActiveMQ 这样的消息传递平台可能更适合。

在极少数情况下,我会考虑将 XMPP 与集成机制一起使用,可能作为开发聊天室的通知机制,或者作为用于控制服务器的管道机制,以监控聊天服务器以获取指令。

于 2012-04-09T12:29:12.097 回答