您好,欢迎访问三七文档
JMS2内容•JMS基础•JMS程序的开发•配置和监控WLSJMSJMS基础4什么是JMS•JMS–JMS规范1.0.2中说明:JMS是一组定义JMS客户机如何访问企业消息传递产品设施的接口和相关语义–允许Java应用共享企业消息系统以交换消息–提供一标准的接口去创建,发送,和接收消息•WebLogicServer包含一个完整的、有丰富特性的消息服务器。第三方的消息服务器(如MQ),只要其提供了JMSAPI的实现,也可以与WebLogicServer配合使用5WebLogicJMS体系结构•WebLogicJMS体系结构包含的主要组件有:–一个完整的,有丰富特性的JMSServer的实现–客户端应用–可通过JNDILookup–消息的持久存储•集群特性–在集群内实现Destination的负载均衡–集群内Destination的透明访问–高可伸缩–提供一高级的迁移框架6WLS8.1中JMS的增强•JMSThinClient•JMSCAPI•简化对远程和第三方的JMSProvider的访问•通过EJB和Servlet可以容易的访问JMS•动态删除Queue或TopicDestinations•重发消息时仍保持顺序•阻塞发送•更好地对过期消息的处理•可以使用ConfigurationWizard进行JMS的相关配置7消息桥•与外部消息提供商实现即取即用的集成–采用即取即用的MQ适配器,实现全面的MQJMS支持BEAWebLogicServer其他消息系统消息WebLogicJMS消息桥JCAJMS适配器MQ适配器XYZ适配器8消息的通讯模型•JMS支持两种的消息通讯通讯模型:Point-to-Point(PTP)和Publish/Subscribe(Pub/Sub),除了以下一些不同以外,这两种消息通讯模型有很多相似的地方:–P2P的消息传递一个消息只能有一个接收者–Pub/Sub的消息传递每一个主题可以有多个订阅者•每一种通讯模型的实现都扩展了公共的基类:–P2P:javax.jsm.Queue–Pub/Sub:javax.jsm.Topic9点对点(PTP)的消息传递•PTP的消息传递由JMS消息队列(Queue)管理•如果多个接收者同时在监听一个队列,基于先到先服务的原则,如果没有接收者,队列会保存这个消息,直到接收者来检测队列10发布/订阅(pub/sub)消息传递•发布/订阅消息传递由JMS消息主题(Topic)管理•JMS会保存消息,直到所有的接收者都接收到11消息的持久•消息可以被指定为持久的和非持久的•选用持久性还是非持久性的消息是性能与可靠性之间的一种平衡的考虑•WebLogic将持久消息保存在JMSStores中,可以是文件或JDBC数据库•在发送消息时,JMS客户机可以明确地指定消息是否持久,如:–Sender.send(msg,DeliveryModer.NON_PERSISTENT,…);12WebLogicJMS类连接JMSSession和一个线程ServerSession封装消息消费者的一个服务–管理池的配置信息ServerSessionPool封装被发送和接收的消息Message提供一个服务器会话池,能够处理连接消费者的并发消息ServerSessionPoolFactory确定一个队列和主题,封装明确的提供者地址Destination提供发送和接收消息的接口MessageProducer&MessageConsumer指定那些处理并发消息的服务器会话的消费者ConnectionConsumer定义消息生产和消费的一系列命令Session描述消息系统的开放消息频道,连接用来创建会话Connection封装连接的配置信息,连接工厂用来配置连接,使用JNDI来查找连接工厂ConnectionFactory描述JMS类13连接工厂(ConnectionFactory)•ConnectionFactory:由服务器管理员创建,并捆绑到JNDI树中,JMS客户机利用它建立一个JMS连接。是开发人员和JMS交互的开始,是为指定的消息服务器和系统配置产生JMS连接连接的类•可以在WebLogicConsole中配置一个或多个连接工厂,并将其捆绑到JNDI树中。也可以使用缺省的ConnectionFactory。•ConnectionFactory类Pub/SubPTP消息模型为Pub/Subprovider创建TopicConnectionTopicConnectionFactory为P2Pporvider创建QueueConnectionQueueConnectionFactoryIsUsedtoCreate...Subclass14连接(Connection)•一个JMS连接表示JMS客户机与WebLogicServer之间的一个活动的连接•通常,每个客户机都使用一个单独的JMS连接,每个JMS连接则可连接到多个JMS目的,连接可以被开始、停止或关闭•Connection类Pub/SubPTP消息模型TopicSessionsTopicConnectionQueueSessionsQueueConnectionIsUsedtoCreate...Subclass15会话(Session)•JMS会话表示客户机与JMS服务器之间的会话状态,JMS会话是建立在JMS连接之上,表示JMS客户机与服务器之间的一个会话线程•会话定义了消息的顺序,JMS可以使用会话进行事务性的消息处理•Session类Pub/SubPTP消息模型为Pub/subprovider创建ProducingandconsumingTopicSession为JMSPTPprovider创建ProducingandconsumingmessagesQueueSessionIsUsedtoCreate...Subclass16目的(Destination)•JMS目的是实际的消息源,可以是一个Queue或一个Topic•可以在在WebLogicAdministrationConsole上使用指定的JNDI名字创建JMS目的,然后,JMS客户机可以通过执行JNDI检索,找到JMS目的•Destination类:TemporaryTopicTopicTemporaryQueueQueueSubclass...JMSPub/subprovider,andexistsforthedurationoftheJMSconnectioninwhichthemessagesarecreated.Atemporarytopiccanbeconsumedonlybythetopicconnectionthatcreatedit.Pub/subJMSPub/subproviderPub/subJMSPTPprovider,andexistsforthedurationoftheJMSconnectioninwhichthemessagesarecreated.Atemporaryqueuecanbeconsumedonlybythequeueconnectionthatcreatedit.PTPPTPInMessagingModel...JMSPTPproviderManagesMessagesfor...17MessageProducer&MessageConsumer•MessageProducer:创建和发送消息的Java应用程序或组件•MessageConsumer:接收消息的Java应用程序或组件•在它们之间是消息服务器,管理它们两者之间的消息传递TopicSubscriberTopicPublisherQueueReceiverQueueSenderSubclass...ReceivesmessagesforaJMSPub/subprovider,andexistsforthedurationoftheJMSconnectioninwhichthemessagesarecreated.MessagedestinationsmustbeboundexplicitlyusingtheappropriateJNDIinterface.Pub/SubSendsmessagesforaJMSPub/subprovider.Pub/SubReceivesmessagesforaJMSPTPprovider,andexistsuntiltheJMSconnectioninwhichthemessagesarecreatedisclosedPTPPTPInMessagingModel...SendsmessagesforaJMSPTPproviderManagesMessagesfor...18消息(Message)•一个JMS消息是由一组固定的头字段,一组用户可配置的可选的属性字段和一个装载消息内容的消息体组成•每一个消息类型都是javax.jms.Message类的子类,不同的消息类型仅仅表示消息内容的类型不同19消息头(MessageHeaderFields)•JMS消息头包括JMS规范定义的一组标准的字段。javax.jms.Message包括get和set方法,用于读取或设置JMS消息头中各个字段的值,应用程序可以使用这些值提供一个JMS消息的更多消息•JMS消息头许多字段还包括了JMS消息的基本信息,这些信息通常用于过滤消息,指定消息的发送顺序等•具体请参考–消息属性(MessagePropertyFields)•JMS消息的发送者可以在消息中设置应用选定的属性,这些属性可以随消息一起发送,JMS消息的接收者可以读取这些属性•属性是”名字/值”形式的数据对,可以调用javax.jms.Message中的setObjectProperty()或类型特定的setProperty()进行设置。•有效的属性类型boolean、byte、double、float、int、long、short和java.lang.String–Msg.setIntProperty(“MyProperty”,4);•通常使用消息的属性对消息进行过滤21消息体(MessageBody)消息的内容是字符串javax.jms.TextMessage消息由串行化的对象流组成,必须按照写对象进的顺序从流中读取对象javax.jms.StreamMessageweblogic.jms.extensions.XMLMessagejavax.jms.ObjectMessagejavax.jms.MapMessagejavax.jms.BytesMessage类型扩展了TextMessage消息类型串行化的对象消息由”名字/值”组成,这些数据是无序的,但映射中的每个名字必须是唯一的原始的字节流,需要完全控制原始消息格式的客户机可以使用这种消息类型说明22非事务性Session应答模式不需要确认NO_ACKNOWLEDGE允许JMS不必急于确认收到的消息,因为没有确认,当系统故障时,消息可以被重新传递DUPS_OK_ACKNOWLEDGE客户机通过javax.jms.Message.acknowledge()确认,只要调用acknowledge(),它将确认当前和先前收到的任何消息CLIENT_ACKNOWLEDGEMULTICAST_NO_ACKNOWLEDGEAUTO_ACKNOWLEDGE确认方式针对通过IP组播方式把消息传递给Topic订阅的情况,在消息传递之后,JMS服务器不再保持这些消息Receive()或onMessage()调用返回成功后,即确认描述23JMSControl•借助JMS控件,WebLogicWorkshop的内置应用程序可轻松与提供JMS实现的消息处理系统进行交互。•在以下情况可以使用JMSControl–发送消息到队列–支持两通路的不同队列:你可以从分别
本文标题:1.10 JMS
链接地址:https://www.777doc.com/doc-5515939 .html