Note: From Tibco EMS Server document

1. Message Model
Point-to-Point模式(queue):每个Message仅有一个生产者和一个消费者。每个Queue可以有多个生产者和多个消费者。Queue可以被声明具有排它性。具有排它性Queue中的消息只能被第一个消费者获取。不论是否具有排它性,消息被某个消费者获取后,会从Queue中删除。

Publish and Subscribe模式(topic):每个Message可以拥有若干生产者和若干个消费者。消费者根据订阅关系获取topic中的消息。EMS API允许持久性的订阅者,消息会为这些持久性订阅者所保存。

2. Destination
对Message Model功能的提升,主要特征包括:
a.通过secure模式提供queue, topic层面的访问控制,参考secure mode and Destination Control
b.设置queue, topic占用内存空间的约束,参考flowControl and overflowPolicy
c.路由消息到Destination,参考Working With Routes
d.通过在Destinatin之间创建bridge,建立混合型Message Model
e. 控制Message发送到Destination的速度,参考Flow Control
g. 与其他Message Service交换消息,如queue能够从Tibco Rendezvous, SmartSockets接收消息,topic能够与Tibco Rendezvous, SmartSockets双向交换消息
h. queue可被设置为具有exclusive或者non-exclusive,参考exclusive
i. queue在可以设置redelivery policy,参考maxRedelivery
j. 跟踪,日志消息到Destination的传送过程,参考trace
k.在消息中包含user name,参考sender name and sender name enforced
l. 在Destination name上支持Wildcards
m.在topic, queue上设置failsafe属性,用于把消息同步保存到硬盘上
n. 设置消费者在后台批量接受消息以提供性能,或者设置queue的消息一次只接收一个消息,参考prefetch

3. Client API
 提供基于java, .net,COBOL的API。示例代码位于安装目录的samples子目录。EMS同时提供了Java类用于纯粹的Java TIBCO Rendezvous Application来连接EMS Server。

4. Administration
 EMS提供了针对Server Operation, Server Object(如ConnectionFactories, Destinations)的管理机制。这些管理功能可以通过Administration Tool的命令行工具实现,也可以通过管理API实现。EMS Client可以通过JNDI来获取Server Object的引用。

管理Server功能:使用Configuration Files, EMS Administration Tool, Authentication and Permissions, Monitor Server Activity(包含Server Activity信息的日志文件,发布关于systemevent Message到Topic中便于对Server的监控,对不同层次细节的统计分析)。

EMS提供对user, groups的本地化管理,也可以通过外部的LDAP来统一。TIBCO Hawk提供了对EMS Server的管理和监控。EMS Server支持SSL协议,用于Client-Server,

Server-Server间的安全通信。支持backup EMS Server,实现了Fault Tolerance。EMS提供了Server-Server间的消息路由。Topic消息可以在任意多个hop间传递,Queue消息最多在一个hop间传递。EMS支持消息的存储转发。

=======

weblogic与MQ的集成方案大致有两种:
一是将MQ配置为weblogic的外部JMS服务器(foreign JMS server),第二种是weblogic的消息桥(messaging bridge)
http://www.360doc.com/content/10/1129/16/4810544_73459234.shtml


3.3.集成到Weblogic
其实这部分的工作,没多少难度,就是配置比较繁琐,开始吧:

3.3.1.创建外部JMS服务器(foreign JMS server)

启动weblogic,登陆控制台,展开domain->服务->消息传递->JMS模块。
选择新建一个JMS模块JMSModule_MQ:




EMS server Tibco_jms


图3.3.1:创建JMS模块



选择一个server:


EMS server Tibco_import_02


图3.3.2:创建JMS模块2



在刚才的模块创建一个资源,类型为外部服务器(foreign server)名为ForeignServer_JMS:


EMS server Tibco_jms_03


图3.3.3:创建模块资源--外部服务器




EMS server Tibco_weblogic_04


图3.3.4:创建模块资源--外部服务器2



外部服务器JND配置


EMS server Tibco_服务器_05


图3.3.5:JNDI参数



在外部服务器创建两个目标:

EMS server Tibco_import_06


图3.3.6:两个目标



及两个连接工厂:

EMS server Tibco_weblogic_07


图3.3.7:两个连接工厂



配置完之后,当然要写一个MDB测试一下:

消息驱动bean代码如下:

Java代码

     
1. package
2.    
3. import
4. import
5. import
6. import
7. import
8. import
9. import
10. import
11. import
12. import
13.    
14. /** 
15.  *  
16.  * @author Justin 
17.  */
18. @MessageDriven(name = "TestMDB2", mappedName = "jms/applicationJMSQueue",    
19. activationConfig = {    
20. @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")    
21. })    
22. public class MQTestBean2 implements
23.    
24. @Resource(mappedName = "jms/approvalJMSQueue")    
25. private
26. @Resource(mappedName = "jms/approvalFactory")    
27. private
28.    
29. public void
30.    
31. try
32.             String msg = ((TextMessage) message).getText();    
33. "=> 收到申请: "
34. "同意申请:"
35. catch
36.             ex.printStackTrace();    
37.         }    
38.     }    
39.    
40. private void sendMessage(String msg) throws
41. null;    
42. null;    
43. try
44.             conn = approvalFactory.createQueueConnection();    
45. false, Session.AUTO_ACKNOWLEDGE);    
46.             QueueSender sender = session.createSender(approvalJMSQueue);    
47.             Message newMsg = session.createTextMessage(msg);    
48.             sender.send(newMsg);    
49. "=> 发送审批结果:"
50. catch
51.             e.printStackTrace();    
52. finally
53. try
54.                 session.close();    
55.                 conn.close();    
56. catch
57.                 e.printStackTrace();    
58.             }    
59.         }    
60.     }    
61. }



部署文件如下:

Xml代码

1. <?xml version="1.0" encoding="UTF-8"?>
2. <weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/90">
3.     <weblogic-enterprise-bean>   
4.         <ejb-name>TestMDB2</ejb-name>   
5.         <message-driven-descriptor>   
6.             <destination-jndi-name>   
7.                 jms/applicationJMSQueue    
8.             </destination-jndi-name>   
9.             <connection-factory-jndi-name>   
10.                 jms/applicationFactory    
11.             </connection-factory-jndi-name>   
12.         </message-driven-descriptor>   
13.     </weblogic-enterprise-bean>   
14. </weblogic-ejb-jar>





打包并发布到weblogic。


现在测试一下:

在MQ管理器中,在application队列放入一个消息:


EMS server Tibco_jms_08


图3.3.8.放入测试消息



如果所有配置正确,则MDB->MQTestBean2会接收到刚刚放入的消息,并进行处理,然后放到approval队列:


EMS server Tibco_weblogic_09



图3.3.9.weblogic服务器输出(netbeans控制台)



之后我们可以再到MQ管理器查看approval队列,可以看到MDB处理后的消息:


EMS server Tibco_weblogic_10



图3.3.10.到approval队列查看处理后的消息



OK,至此,我们成功地将MQ无缝地集成到了weblogic上,使部署在weblogic上的MDB可以像使用原生的JMS一样操控MQ队列了。

 


3.3.集成到Weblogic
其实这部分的工作,没多少难度,就是配置比较繁琐,开始吧:

3.3.1.创建外部JMS服务器(foreign JMS server)

启动weblogic,登陆控制台,展开domain->服务->消息传递->JMS模块。
选择新建一个JMS模块JMSModule_MQ:


EMS server Tibco_jms


图3.3.1:创建JMS模块



选择一个server:


EMS server Tibco_import_02


图3.3.2:创建JMS模块2



在刚才的模块创建一个资源,类型为外部服务器(foreign server)名为ForeignServer_JMS:


EMS server Tibco_jms_03


图3.3.3:创建模块资源--外部服务器




EMS server Tibco_weblogic_04


图3.3.4:创建模块资源--外部服务器2



外部服务器JND配置


EMS server Tibco_服务器_05


图3.3.5:JNDI参数



在外部服务器创建两个目标:

EMS server Tibco_import_06


图3.3.6:两个目标



及两个连接工厂:

EMS server Tibco_weblogic_07


图3.3.7:两个连接工厂



配置完之后,当然要写一个MDB测试一下:

消息驱动bean代码如下:

Java代码


    1. package
    2.    
    3. import
    4. import
    5. import
    6. import
    7. import
    8. import
    9. import
    10. import
    11. import
    12. import
    13.    
    14. /** 
    15.  *  
    16.  * @author Justin 
    17.  */
    18. @MessageDriven(name = "TestMDB2", mappedName = "jms/applicationJMSQueue",    
    19. activationConfig = {    
    20. @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")    
    21. })    
    22. public class MQTestBean2 implements
    23.    
    24. @Resource(mappedName = "jms/approvalJMSQueue")    
    25. private
    26. @Resource(mappedName = "jms/approvalFactory")    
    27. private
    28.    
    29. public void
    30.    
    31. try
    32.             String msg = ((TextMessage) message).getText();    
    33. "=> 收到申请: "
    34. "同意申请:"
    35. catch
    36.             ex.printStackTrace();    
    37.         }    
    38.     }    
    39.    
    40. private void sendMessage(String msg) throws
    41. null;    
    42. null;    
    43. try
    44.             conn = approvalFactory.createQueueConnection();    
    45. false, Session.AUTO_ACKNOWLEDGE);    
    46.             QueueSender sender = session.createSender(approvalJMSQueue);    
    47.             Message newMsg = session.createTextMessage(msg);    
    48.             sender.send(newMsg);    
    49. "=> 发送审批结果:"
    50. catch
    51.             e.printStackTrace();    
    52. finally
    53. try
    54.                 session.close();    
    55.                 conn.close();    
    56. catch
    57.                 e.printStackTrace();    
    58.             }    
    59.         }    
    60.     }    
    61. }



    部署文件如下:

    Xml代码

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <weblogic-ejb-jar xmlns="http://www.bea.com/ns/weblogic/90">
    3.     <weblogic-enterprise-bean>   
    4.         <ejb-name>TestMDB2</ejb-name>   
    5.         <message-driven-descriptor>   
    6.             <destination-jndi-name>   
    7.                 jms/applicationJMSQueue    
    8.             </destination-jndi-name>   
    9.             <connection-factory-jndi-name>   
    10.                 jms/applicationFactory    
    11.             </connection-factory-jndi-name>   
    12.         </message-driven-descriptor>   
    13.     </weblogic-enterprise-bean>   
    14. </weblogic-ejb-jar>


    打包并发布到weblogic。


    现在测试一下:

    在MQ管理器中,在application队列放入一个消息:


    EMS server Tibco_jms_08


    图3.3.8.放入测试消息



    如果所有配置正确,则MDB->MQTestBean2会接收到刚刚放入的消息,并进行处理,然后放到approval队列:


    EMS server Tibco_weblogic_09



    图3.3.9.weblogic服务器输出(netbeans控制台)



    之后我们可以再到MQ管理器查看approval队列,可以看到MDB处理后的消息:


    EMS server Tibco_weblogic_10



    图3.3.10.到approval队列查看处理后的消息



    OK,至此,我们成功地将MQ无缝地集成到了weblogic上,使部署在weblogic上的MDB可以像使用原生的JMS一样操控MQ队列了。