zoukankan      html  css  js  c++  java
  • 消息驱动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);
  • 相关阅读:
    Entity Framework笔记(二)
    C#依据word模版动态生成文档
    Entity Framework笔记(一)
    Ajax基础知识(二)
    Ajax基础知识(一)
    ASP.Net中使用XMLDataSource
    ubuntu安装jdk eclipse mysql等
    使用SQL Server Management Studio 创建数据库备份作业
    Visual Studion 2013 HTML 如何打开设计图
    Lodop6 以上打印控件使用,详参考自带说明文档,打印样式及文字大小要特殊设置一下
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637688.html
Copyright © 2011-2022 走看看