消息驱动Bean (Message Driven Bean)

消息驱动Bean(MDB)是设计用来专门处理基于消息请求的组件。它是一个异步的无状态Session Bean,客户端调
用MDB 后无需等待,立刻返回,MDB 将异步处理客户请求。一个MDB 类必须实现MessageListener 接口。当
容器检测到bean 守候的队列一条消息时,就调用onMessage()方法,将消息作为参数传入。MDB 在OnMessage()
中决定如何处理该消息
。你可以用注释来配置MDB 监听哪一条队列。当MDB 部署时,容器将会用到其中的注
释信息。
当一个业务执行的时间很长,而执行结果无需实时向用户反馈时,很适合使用消息驱动Bean。如订单成功后给用
户发送一封电子邮件或发送一条短信等。
1.1 Queue 消息的发送与接收(PTP 消息传递模型)
客户端发送消息一般有以下步
骤:
(1) 得到一个JNDI 初始化上下文(Context);
例子对应代码:
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");
InitialContext ctx = new InitialContext(props);
(2) 根据上下文来查找一个连接工厂TopicConnectFactory/ QueueConnectionFactory (有两种连接工厂,根据是topic/queue 来使用相应的类型);
例子对应代码:
QueueConnectionFactory factory = (QueueConnectionFactory) ctx.lookup("ConnectionFactory");
(3) 从连接工厂得到一个连接(Connect 有两种[TopicConnection/ QueueConnection]);
例子对应代码:conn = factory.createQueueConnection();
(4) 通过连接来建立一个会话(Session);
例子对应代码:session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
这句代码意思是:建立不需要事务的并且能自动接收消息收条的会话,在非事务Session 中,消息传递的方
式有三种:
Session.AUTO_ACKNOWLEDGE :当客户机调用的receive 方法成功返回,或当MessageListenser 成功处理
了消息,session 将会自动接收消息的收条。
Session.CLIENT_ACKNOWLEDGE :Session 对象依赖于应用程序对已收到的消息调用确认方法。一旦调用
该方法,会话将确认所有自上次确认后收到的消息。该方法允许应用程序通过一次调用接收、处理和确认一
批消息。
Session. DUPS_OK_ACKNOWLEDGE :一旦消息处理中返回了应用程序接收方法,Session 对象即确认消息
接收,允许重复确认。就资源利用情况而言,此模式最高效。
(5) 查找目的地(Topic/ Queue);
例子对应代码:Destination destination = (Queue) ctx.lookup("queue/foshanshop");
(6) 根据会话以及目的地来建立消息制造者MessageProducer (扩展了QueueSender 和TopicPublisher 这两个基本接口)
例子对应代码:
MessageProducer producer = session.createProducer(destination);
TextMessage msg = session.createTextMessage("佛山人您好,这是我的第一个消息驱动Bean");//发送文本
producer.send(msg);

 

posted on   小强斋太  阅读(300)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2012年5月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9
点击右上角即可分享
微信分享提示