维基百科将XMPP
定义为:
...基于XML的面向消息的中间件的开放标准通信协议。
xmpp.org将XMPP
定义为:
可扩展消息传递和在线协议(XMPP)是一种用于实时通信的开放式XML技术,可为各种应用提供支持。
虽然我确定这些定义都非常准确,但他们并没有告诉我一件事关于我 - 一个Java开发人员 - 实际上可以做什么与XMPP !
例如,我听说XMPP可以用于面向消息的中间(MOM)。怎么会这样? XMPP可以以某种方式与我的Apache Camel路由,我的ESB或某些SOA实现集成,以提供更好/更快/更强大的业务层吗?如果是这样,如何?!?!
对XMPP的一个好的,英语 - 英语的解释,以及一些实际的例子(更好的以MOM为中心)将不胜感激。提前谢谢!
答案 0 :(得分:17)
XMPP可用于各种基于消息传递的应用程序。基本上,它提供了可用于构建基于XML的消息传递应用程序的核心服务。它基于分散的客户端 - 服务器架构,并利用长期的TCP连接进行通信......
核心服务包括......
教科书用例...
消息传递模式/模式......
部署方法......
Java集成
针对您的具体问题“它可以在SOA /中间件中使用吗?”....
此外,XMPP与Camel的集成非常简单。有关与Google Talk服务器连接的基本示例,请参阅此camel-xmpp unit test。此外,Camel的框架允许您构建应用程序并轻松交换不同的消息传递技术(JMS,STOMP,mina等)。
答案 1 :(得分:4)
XMPP是一种开放且可扩展的实时通信标准。
XMPP附带了一个在rfc中定义的核心,它描述了进行即时消息传递和交换状态信息的基本协议。然而,XMPP真正闪耀的地方在于其可扩展性:XMPP定义了构建块(存在,消息和iq节)以创建通信协议。这些通常是扩展。可以找到当前可用的标准扩展列表here。其中最重要的通常适用于所有流行的XMPP服务器。 正是这种可扩展性使XMPP成为面向消息的中间件。
让我举一个例子 Publish-Subscribe 这是一个典型的中间件模式,只要您从具有简单消息传递足够的几个实体的场景离开就成为必需品。 PubSub用于实体或生成器生成其他实体(使用者)要使用的信息的情况。通常,信息被写入消费者订阅的节点。订阅时,他们会在添加/更新/删除项目时收到通知。 PubSub可以优雅地覆盖大量的用例,包括排队长时间工作,让工作人员处理它们,以及微博。 XMPP具有非常强大且可广泛使用的扩展,以标准方式处理PubSub,如XEP-0060中所述,并提供开箱即用的处理发布,订阅,通知和安全性的工作流程。查看XEP中的用例可以让您了解整个事物的简单性。
现在,虽然大多数用例都是通过使用(或滥用)现有标准扩展来实现的,但最终您可能需要一些其他地方未涉及的额外自定义协议。使用您选择的语言,您可以编写定义自己的协议的 XMPP组件。然后,将组件连接到正在运行的XMPP服务器,并使用简单的命名空间让服务器知道您可以处理的消息类型,并让服务器将您的协议功能通告给连接到它的客户端。你可以做到这一点是多么简单或复杂,没有尽头。缺乏更好的示例,但可能足以说明,here是我编写的一个组件,它利用XMPP在Plone CMS中进行实时协作编辑(类似于Google文档)。虽然细节可能变得复杂,但我认为看一下该页面上的“协议规范”会给你一个想法。
最后,关于Java特定库,正如@boday所提到的那样,有一些库可以很容易地开始以及Apache Camel集成(尽管它只做了简单的消息传递,据我所知)。请记住,了解XMPP如何工作以及能够超越使用现有库的投资是非常值得的,并且可以带来极其强大且简单的集成。
答案 2 :(得分: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-can-you-do-with-xmpp.html 也许你应该拿到这本书?文章中没有例子。
4)http://kirkwylie.blogspot.com/2008/07/real-mom-is-hard-lets-use-xmpp.html 有趣的文章最后一行基本上说:如果你可以使用AMQP或JMS,为什么要使用XMPP?
我希望这可以帮助你找到你需要的东西。
答案 3 :(得分:0)
让我简单介绍 XMPP是什么?
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.
LONG POLLING
图表的顶部是客户端。底部是服务器。
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 HERE
的更多信息如果您想要设置自己的XMPP服务器,请阅读this。
答案 4 :(得分:-2)
XMPP基本上是聊天室客户端与聊天服务器通信的协议。 Camel允许您与XMPP集成,以便您可以使用或生成这样的机制http://camel.apache.org/xmpp.html
当您开始讨论业务层,ESB,SOA等和MOM时,您可能正在寻找支持点对点和发布订阅消息传递的消息传递机制。您可能还在考虑诸如保证消息传递,高可用性和细粒度安全性之类的事情。您不会从读取和写入文本消息到聊天服务器的机制中获取这些内容。像ActiveMQ这样的消息传递平台可能更适合。
我很少会考虑使用带有集成机制的XMPP,可能作为开发人员聊天室的通知机制,或者作为管道服务器监控聊天服务器获取指令的管道磁带机制。