ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring整合Weblogic jms实战

2019-10-29 20:54:27  阅读:197  来源: 互联网

标签:weblogic 队列 Spring 配置 SAF Weblogic jms import


本文主要介绍weblogic jms的配置,包括JMS 服务器和JMS 模块(连接工厂、队列、远程 SAF 上下文、SAF 导入目的地、SAF 错误处理)的配置;并在Spring环境下进行消息的监听及发送;为了更多的使用webloigc jms的功能,发送的队列使用saf配置的远程weblogic jms队列(两边的weblogic版本须一致),当然本地也是可以的。本文中demo所使用的软件环境为:weblogic 10.3.6.0、spring 5.1.2.RELEASE

注:saf配置的远程队列只能发送消息,不能监听消息。

1、weblogic jms配置

1.1、配置JMS 服务器

 注:需配置持久性存储,没有就创建一个

1.2、配置JMS 模块

 

下面的功能都是在JMS 模块中配置;连接工厂、队列、远程 SAF 上下文、SAF 导入目的地、SAF 错误处理

这里就不一一截图配置过程了,按页面提示配置就行;配置结果如下

连接工厂需设置jndi,程序里会用到

SAF 远程上下文配置的远程地址及用户名密码信息

SAF 导入目的地配置的远程的队列消息及对应到本地的jndi

SAF 错误处理程序配置错误处理策略属性,选配

队列需设置jndi,程序里会用到

 

SAF 导入目的地配置的队列消息如下:

  点击队列名称:

  本地 JNDI 名称程序里会用到,向该jndi发送消息实际会发送到远程的队列里。

 2、spring配置

增加applicationContext-jms.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:security="http://www.springframework.org/schema/security"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
                        http://www.springframework.org/schema/aop
                        http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-4.3.xsd
                        http://www.springframework.org/schema/security
                        http://www.springframework.org/schema/security/spring-security-4.3.xsd
                        http://www.springframework.org/schema/task
                        http://www.springframework.org/schema/task/spring-task-4.3.xsd">

    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
        <property name="environment">
            <props>
                <prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
                <prop key="java.naming.provider.url">t3://10.39.196.10:7001</prop>
                <prop key="java.naming.security.principal">weblogic</prop>
                <prop key="java.naming.security.credentials">weblogic1</prop>
            </props>
        </property>
    </bean>
    <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiTemplate" ref="jndiTemplate" />
        <property name="proxyInterface" value="javax.jms.ConnectionFactory" />
        <property name="jndiName" value="ConnectionFactory-test" />
    </bean>
    <bean id="testQueueSend" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="testQueueSend" />
        <property name="jndiTemplate" ref="jndiTemplate" />
    </bean>
    <bean id="testQueueReceive" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="testQueue" />
        <property name="jndiTemplate" ref="jndiTemplate" />
    </bean>
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="jmsConnectionFactory" />
    </bean>

    <bean id="sender" class="com.inspur.demo.jms.Sender">
    </bean>
    <task:scheduled-tasks>
        <task:scheduled ref="sender" method="hello" cron="0/5 * * * * ?" />
    </task:scheduled-tasks>
    <bean id="receiver" class="com.inspur.demo.jms.Receiver">
    </bean>
    <bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="jmsConnectionFactory" />
        <property name="destination" ref="testQueueReceive" />
        <property name="messageListener" ref="receiver" />
        <property name="autoStartup" value="true" />
    </bean>
</beans>

jndiTemplate配置weblogic的连接信息

jmsConnectionFactory配置连接工厂

testQueueSend向该队列发送消息,对应上面saf远程目的地里队列的本地jndi名称,

testQueueReceive对该队列进行监听,接受消息

jmsTemplate配置jms的模板

sender发送消息的类,把该类配置为定时任务,定时发送消息;

receiver监听的类

listenerContainer监听容器

3、类信息

发送者:

package com.inspur.demo.jms;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class Sender {
    protected static Logger logger = LoggerFactory.getLogger(Sender.class);
    
    //发送消息的队列
    @Autowired
    @Qualifier("testQueueSend")
    private Destination destination;
    
    @Autowired
    private JmsTemplate jmsTemplate;
    
    public void hello() {
        String message = System.currentTimeMillis() + "-hello";
        logger.info("Message Send:{}", message);
        jmsTemplate.send(destination, new MessageCreator() {
            @Override
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(message);
            }
        });
    }
}

使用JmsTemplate来发送消息。

 

接受者:

package com.inspur.demo.jms;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Receiver implements MessageListener {
    protected static Logger logger = LoggerFactory.getLogger(Receiver.class);
    
    @Override
    public void onMessage(Message message) {
        try {
            String text = "";   
            if (message instanceof TextMessage) {   
                text = ((TextMessage) message).getText();   
            } 
            logger.info("Message received:{}", text);
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
    
}

4、测试

1.发送消息

启动程序后,每隔5秒中会往testQueueSend队列(远程队列)中发送一条消息,可到weblogic控制台查看消息.

2.接受消息

在weblogic控制台手工往testQueueReceive队列插入一条消息,程序日志会打印该消息内容。

标签:weblogic,队列,Spring,配置,SAF,Weblogic,jms,import
来源: https://www.cnblogs.com/wuyongyin/p/11753885.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有