EJB---->消息驱动bean--Topic 消息的发送与接收(Pub/sub 消息传递模型)
TopicSender.java (Topic 消息发送者)
import javax.annotation.Resource; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.TextMessage; import javax.jms.Topic; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; import javax.jms.TopicSession; import com.foshanshop.ejb3.TSender; /** * 发送Topic消息 * @author lihuoming * */ @Stateless @Remote (TSender.class) public class TSenderBean implements TSender { @Resource(mappedName="TopicConnectionFactory") private TopicConnectionFactory factory; @Resource(mappedName="topic/chatTopic") private Topic destination; public void send(String msg) { TopicConnection conn = null; TopicSession session = null; try { conn = factory.createTopicConnection(); session = conn.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(destination); TextMessage text = session.createTextMessage(msg); producer.send(text); }catch (Exception e){ e.printStackTrace(); }finally{ try { session.close (); conn.close(); } catch (JMSException e) { e.printStackTrace(); } } } }TopicPrintBeanOne.java(Topic 消息接收者之一)
package com.foshanshop.ejb3.impl; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"), @ActivationConfigProperty(propertyName="destination", propertyValue="topic/chatTopic") }) public class TopicPrintBeanOne implements MessageListener{ public void onMessage(Message msg) { try { TextMessage tmsg = (TextMessage) msg; String content = tmsg.getText(); System.out.println(this.getClass().getName()+"=="+ content); } catch (Exception e){ e.printStackTrace(); } } }
TopicPrintBeanTwo.java(Topic 消息接收者之二)
package com.foshanshop.ejb3.impl; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"), @ActivationConfigProperty(propertyName="destination", propertyValue="topic/chatTopic") }) public class TopicPrintBeanTwo implements MessageListener{ public void onMessage(Message msg) { try { TextMessage tmsg = (TextMessage) msg; String content = tmsg.getText(); System.out.println(this.getClass().getName()+"=="+ content); } catch (Exception e){ e.printStackTrace(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律