jms中消息接收的实现原理

来源:互联网 发布:淘宝的孕妇装 编辑:程序博客网 时间:2024/06/05 07:56

在jms中有多处同步异步的概念,使用消息驱动bean实现消息异步消费的含义是消息从broker端传送至consumer的客户端时,不管consumer是否调用onmessage来处理消息,会持续的向unconsumermessage容器总发送消息


消息驱动Bean 

驱动Bean (MDB) 提供了一个实现异步通信比直接使用Java消息服务(JMS)更容易地方法。创建MDB接收异步JMS消息。容器处理为JMS队列和主题所要求加载处理的大部分工作。它向相关的MDB发送所有的消息。一个MDB允许J2EE应用发送异步消息,该应用能处理这些消息。实现javax.jms.MessageListener接口和使用@MessageDriven注释该Bean来指定一个Bean是消息驱动Bean。 

消息驱动Bean实例 
Java代码  收藏代码
  1. import javax.ejb.MessageDriven;  
  2. import javax.ejb.ActivationConfigProperty;  
  3. import javax.ejb.Inject;  
  4. import javax.jms.*;  
  5. import java.util.*;  
  6. import javax.ejb.TimedObject;  
  7. import javax.ejb.Timer;  
  8. import javax.ejb.TimerService;  
  9. @MessageDriven(  
  10. activationConfig = {  
  11. @ActivationConfigProperty(propertyName="connectionFactoryJndiName",  
  12.   
  13. propertyValue="jms/TopicConnectionFactory"),  
  14. @ActivationConfigProperty(propertyName="destinationName",  
  15.   
  16. propertyValue="jms/myTopic"),  
  17. @ActivationConfigProperty(propertyName="destinationType",  
  18.   
  19. propertyValue="javax.jms.Topic"),  
  20. @ActivationConfigProperty(propertyName="messageSelector",  
  21.   
  22. propertyValue="RECIPIENT = 'MDB'")  
  23. }  
  24. )  
  25.   
  26. /** 
  27. *监听可配置JMS队列或者主题和通过当一个消息发送到队列或者主题 
  28. *调用它的onMessage()方法得到提醒的一个简单的消息驱动 
  29. *该Bean打印消息的内容 
  30. */  
  31.   
  32. public class MessageLogger implements MessageListener, TimedObject  
  33. {  
  34.   
  35. @Inject javax.ejb.MessageDrivenContext mc;  
  36.   
  37. public void onMessage(Message message)  
  38. {  
  39. System.out.println("onMessage() - " + message);  
  40. try  
  41. {  
  42. String subject = message.getStringProperty("subject");  
  43. String inmessage = message.getStringProperty("message");  
  44. System.out.println("Message received\n\tDate: " + new java.util.Date() +  
  45.   
  46. "\n\tSubject: " + subject + "\n\tMessage: " + inmessage + "\n");  
  47. System.out.println("Creating Timer a single event timer");  
  48. TimerService ts = mc.getTimerService();  
  49. Timer timer = ts.createTimer(30000, subject);  
  50. System.out.println("Timer created by MDB at: " +  
  51.   
  52. new Date(System.currentTimeMillis()) +" with info: "+subject);  
  53. }  
  54. catch (Throwable ex)  
  55. {  
  56. ex.printStackTrace();  
  57. }  
  58. }  
  59.   
  60. public void ejbTimeout(Timer timer)  
  61. {  
  62. System.out.println("EJB 3.0: Timer with MDB");  
  63. System.out.println("ejbTimeout() called at: " +  
  64.   
  65. new Date(System.currentTimeMillis()));  
  66. return;  
  67. }  
  68. }  
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米手机max黑屏打不开怎么办 小米max开不了机怎么办 小米6接听电话声音小怎么办 小米手机接听电话声音小怎么办 小米5听筒声音小怎么办 红米手机不能开机怎么办 小米5x升级失败怎么办 安卓手机打电话黑屏怎么办 来电话就出黑屏怎么办 oppo手机停留在开机界面怎么办 小米4c死机了怎么办 苹果手机拨打电话时黑屏怎么办 华为畅享6黑屏怎么办 手机拨号键盘变小了怎么办 小米5s手机黑屏打不开怎么办 小米5s黑屏只能开关机怎么办 手机拨号键没了怎么办 华为手机桌面拨号图标不见了怎么办 华为手机拨号图标不见了怎么办 小米4s屏幕显示黑屏怎么办 平板拨号键没了怎么办 华为手机拨号图标没了怎么办 华为荣耀手机进水了怎么办 华为畅享7黑屏怎么办 华为畅玩7x黑屏怎么办 华为手机打电话时黑屏怎么办 三星a8手机黑屏打不开怎么办 华为手机恢复出厂后黑屏怎么办 华为荣耀4c白屏怎么办 华为荣耀6手机信号不好怎么办 华为荣耀8手机音量小怎么办 无法激活触控id怎么办 魅蓝2卡顿怎么办 小米max2玩王者荣耀卡怎么办 小米4玩王者荣耀卡怎么办 华为荣耀7i卡顿怎么办 华为荣耀7卡的怎么办 荣耀8手机有孤独怎么办 红米note4玩游戏卡怎么办 红米note4x玩游戏卡怎么办 华为4c死屏怎么办