JDeveloper开发JMS-记录日志功能(一)

前言

目前为此我们已实现JMS消息的服务方设置1.17.Weblogic创建JMS服务+客户端调用1.18.JDeveloper中开发JMS客户端,但目前为止只实现的消息的发送与接受,如果想实现更复杂的JMS功能,如在JMS收到消息时,向数据库写入日志,并返回状态等,这就需要使用EJB来实现JMS客户端监听,实时的接收到消息后进行功能处理,我们接下来讲解如何使用JMS实现日志记录。

消息驱动Bean(Message Driven Bean)

定义:消息驱动是专门用来处理基于消息请求的组件(包括JMS,MQ等)。

消息模型:点对点消息传递和发布/订阅消息传递

点对点消息传递模型:一条信息只能传递给一个队列接收方

发布/订阅消息传递:一条消息可以由多个接收者接收

详细解析:首先它是无状态的Session Bean,客户端调用MDB时,无需等待,可以立即返回,MDB会异步处理客户的请求;MDB必须实现MessageListener接口,当容器守候检测到一条队列信息时,将调用onMessage()方法。

适用范围:当一个业务执行很长,然后又无需将结果实时反馈客户时,适合使用MDB;如订单成功后向客户发送一条成功短信或者一封邮件。

1、新建工程

新建Message-Driven Bean项目,为命名为:CFESBLog

image-20210604135735552

image-20210604135753685

2、新建MDB

新建EJB,为命名为:MessageDrivenEJBBean

image-20210604135917317

3、修改EJB代码

package cfesblog;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

@MessageDriven(mappedName = "MonQueue")
public class MessageDrivenEJBBean implements MessageListener {
    @Override
    public void onMessage(Message arg0) {
            // TODO Auto-generated method stub
            TextMessage textMessage=(TextMessage)arg0;
            try {
                    System.out.print("--------------TextMessage="+textMessage.getText());
                //收到消息并处理,比如由xml转为json,或xml转为对象,向数据库写入日志等
            } catch (JMSException e) {
                    // TODO Auto-generated catch block
                    System.out.print("--------------error:"+e.getMessage());
                    e.printStackTrace();
            }
    }
}

效果如图:

image-20210604140139061

对应weblogic中的JMS设置如下:

image-20210604140304696

4、打包EJB

选择打包为jar文件

image-20210604141414535

image-20210604141437609

如果你是本时开发环境的weblogic,可以跳过第5步,在jdeveloper中直接部署到本地weblogic中,如下图

image-20210604144311946

5、部署EJB

上传jar文件到服务器

进入域->部署 进行EJB部署

image-20210604141600946

image-20210604141651957

image-20210604141707704

下一步使用默认即可,最后安装完成后效果如下图:

image-20210604141804965

6、测试

向准备好的JMS里写入消息,可参考1.18.JDeveloper中开发JMS客户端 中的消息发送,注意,由于1.18中的连接名为"jms/jms_test_connection_factory1",使用OSB连接时地址会出错,所以这里我们把连接工厂和queue名称修改了,正确的连接参数为:jms://127.0.0.1:7101/MonCF/MonQueue

image-20210604142524510

7、后续优化思路

​ 目前为止,EJB已能监听到发送的消息,下一步我们准备只要OSB管道中进行了服务接入,就异步向JMS放入过程的数据(包括出错时错误日志):如请求系统 ,服务系统 ,请求报文,返回报文,请求时间,返回时间等,当EJB接收到消息后,把该过程数据记录进数据与elasticsearch,实现OSB服务过程日志记录功能。

请参与:1.20.JDeveloper开发JMS-记录日志功能(二)

results matching ""

    No results matching ""