我目前正在评估JMS,但我没有得到我可以用它的东西。
目前,我认为这将是一个Usecase:我想创建一个SalesInvoice PDF并在SalesOrder离开仓库时打印它,所以在Delivery事务期间,我可以发送一个事务性打印请求,该请求刚从SalesOrder事务完成时开始成功。
现在我发现大多数JMS产品都是独立服务器。
答案 0 :(得分:44)
JMS是一个非常有用的系统,但不是用于各种目的。
它本质上是一个在节点之间发送消息的高级框架,具有发现选项,健壮性等。
一个有用的用例是当您希望客户端和服务器相互通信,但客户端实际上没有服务器的地址时(例如,您可能有多个服务器)。客户端只需要知道代理和队列/主题名称,服务器也可以连接。
JMS还增加了稳健性。例如,您可以对其进行配置,以便在客户端发送消息时服务器发生故障或相反,您仍然可以从客户端发送消息或从服务器轮询消息。如果您曾尝试使用套接字直接实现此功能 - 那将是一场噩梦。
您描述的场景听起来像是一个经典的J2EE问题,为什么不使用J2EE框架? JMS经常在J2EE内部用于通信,但是你获得了所有其他好处。
答案 1 :(得分:17)
的Java消息服务(JMS)是什么
JMS是一种消息传递标准,它允许Java EE应用程序以松散耦合,可靠和异步的方式创建,发送,接收和使用消息。我建议您阅读Java Message Service API Overview了解更多详情。
为什么需要用于消息处理的独立服务器,例如使用Quartz调度程序进行一些简单的inproc处理?
当然,在您的情况下,Quartz是一种选择。但是如果发票系统是远程系统怎么办?如果您不想等待答案怎么办?如果远程系统在您想要与之通信时关闭怎么办?如果网络不总是可用怎么办?这就是JMS的用武之地.JMS允许发送保证交付的消息并以事务方式使用它(发送或消费消息可以是全局事务的一部分)。
它如何与我的应用程序交互?
JMS支持两种通信模式:点对点和发布/订阅(如果这回答了问题)。
是不是太慢了?
我一直在与之合作的MOM很快。
您已成功实施哪些用例?
用于预订应用程序,银行后台(处理市场数据)等系统,或者更简单地用于发送电子邮件。
答案 2 :(得分:5)
为什么需要独立服务器 用于消息处理,例如一些 使用Quartz进行简单的inproc处理 调度器?
JMS的优势在于,您可以为同一队列拥有多个生产者和多个使用者,并且JMS代理可以管理负载。
如果您有多个生产者但单一消费者,您也可以使用其他方法,例如石英调度程序和数据库表。但是一旦你有多个消费者,锁定方案就变得很难设计;最好选择已经批准的消息解决方案。有关详细信息,请参阅我的其他答案:Why choosing JMS for asynchronous solution ?和Producer/consumer system using database
其他几点太模糊,无法回答。
答案 3 :(得分:3)
我在很多项目中都使用过它。它可以帮助实现可伸缩性,服务分离和高可用性。以下是几年前我在项目中如何使用它的描述:
http://coders-log.blogspot.com/2008/12/favorite-projects-series-installment-2.html
该描述解释了JMS为此特定项目带来的内容,但其他项目将出于各种原因使用消息传递系统。
答案 4 :(得分:1)
JMS是message-oriented middleware。
- 为什么需要一个用于消息处理的独立服务器,例如使用Quartz调度程序进行一些简单的inproc处理?
这取决于您可能拥有的其他组件。我猜。但我对Quartz一无所知
- 它如何与我的应用程序交互?
您向经纪人发送消息。
- 是不是太慢了?
比较什么?
- 您已成功实施哪些用例?
我已经使用JMS来实现SIP应用服务器,以便在各个组件之间进行通信。
答案 5 :(得分:1)
消息传递通常用于互连不同的系统并异步发送请求/命令。一个常见的例子是银行客户端应用程序请求批准交易。服务器位于另一家银行的系统中。两个系统都连接在企业服务总线中。请求进入消息传递总线,它立即确认消息的接收。客户端可以继续处理。只要服务器系统可用,总线就会将消息转发给它。当然需要有第二条路径,服务器通知客户端事务执行成功或失败。这也可以用JMS实现。
请注意,这两个系统无需实现JMS。一个可以使用JMS,另一个可以使用MSMQ。公交车将负责互连。
答案 6 :(得分:1)
来自Javadoc:
Java消息服务(JMS)API为Java程序提供了创建,发送,接收和读取企业消息系统消息的通用方法。
换句话说,与此处的所有其他答案相反,JMS只不过是一个 API, ,包装访问第三个 - 派对消息代理,通过供应商实施的“JMS提供商”。那些 Message Brokers ,例如IBM MQ和许多其他人,具有其他答案中提到的可靠性,异步性等特征。 JMS本身完全不提供它们。 Message Brokers是什么JDBC是SQL数据库,JNDI是LDAP服务器(等等)。
答案 7 :(得分:0)
我通过一个例子找到了对JMS的非常好的解释。
这是一个简单的聊天应用程序,JMS队列用于在用户之间传递消息,如果接收者离线,则消息留在队列中。
在这个示例实现中,他们使用了
很好地解释了队列的JBoss配置步骤 它可在http://coder2design.com/messaging-service/
获得即使是可下载的代码也可以在那里使用。