Spring整合Weblogic jms實(shí)例詳解
本文主要介紹weblogic jms的配置,包括JMS 服務(wù)器和JMS 模塊(連接工廠、隊(duì)列、遠(yuǎn)程 SAF 上下文、SAF 導(dǎo)入目的地、SAF 錯誤處理)的配置;并在Spring環(huán)境下進(jìn)行消息的監(jiān)聽及發(fā)送;為了更多的使用webloigc jms的功能,發(fā)送的隊(duì)列使用saf配置的遠(yuǎn)程weblogic jms隊(duì)列(兩邊的weblogic版本須一致),當(dāng)然本地也是可以的。本文中demo所使用的軟件環(huán)境為:weblogic 10.3.6.0、spring5.1.2.RELEASE
注:saf配置的遠(yuǎn)程隊(duì)列只能發(fā)送消息,不能監(jiān)聽消息。
1、weblogic jms配置
1.1、配置JMS 服務(wù)器

注:需配置持久性存儲,沒有就創(chuàng)建一個
1.2、配置JMS 模塊

下面的功能都是在JMS 模塊中配置;連接工廠、隊(duì)列、遠(yuǎn)程 SAF 上下文、SAF 導(dǎo)入目的地、SAF 錯誤處理
這里就不一一截圖配置過程了,按頁面提示配置就行;配置結(jié)果如下

連接工廠需設(shè)置jndi,程序里會用到
SAF 遠(yuǎn)程上下文配置的遠(yuǎn)程地址及用戶名密碼信息
SAF 導(dǎo)入目的地配置的遠(yuǎn)程的隊(duì)列消息及對應(yīng)到本地的jndi
SAF 錯誤處理程序配置錯誤處理策略屬性,選配
隊(duì)列需設(shè)置jndi,程序里會用到
SAF 導(dǎo)入目的地配置的隊(duì)列消息如下:

點(diǎn)擊隊(duì)列名稱:

本地 JNDI 名稱程序里會用到,向該jndi發(fā)送消息實(shí)際會發(fā)送到遠(yuǎn)程的隊(duì)列里。
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向該隊(duì)列發(fā)送消息,對應(yīng)上面saf遠(yuǎn)程目的地里隊(duì)列的本地jndi名稱,
testQueueReceive對該隊(duì)列進(jìn)行監(jiān)聽,接受消息
jmsTemplate配置jms的模板
sender發(fā)送消息的類,把該類配置為定時任務(wù),定時發(fā)送消息;
receiver監(jiān)聽的類
listenerContainer監(jiān)聽容器
3、類信息
發(fā)送者:
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);
//發(fā)送消息的隊(duì)列
@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來發(fā)送消息。
接受者:
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.發(fā)送消息
啟動程序后,每隔5秒中會往testQueueSend隊(duì)列(遠(yuǎn)程隊(duì)列)中發(fā)送一條消息,可到weblogic控制臺查看消息.
2.接受消息
在weblogic控制臺手工往testQueueReceive隊(duì)列插入一條消息,程序日志會打印該消息內(nèi)容。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于SpringBoot中activeMq的JmsTemplate的實(shí)例
- SpringBoot集成JmsTemplate(隊(duì)列模式和主題模式)及xml和JavaConfig配置詳解
- SpringBoot 整合 JMSTemplate的示例代碼
- Spring Boot基于Active MQ實(shí)現(xiàn)整合JMS
- 詳解spring boot整合JMS(ActiveMQ實(shí)現(xiàn))
- spring整合JMS實(shí)現(xiàn)同步收發(fā)消息(基于ActiveMQ的實(shí)現(xiàn))
- Spring-boot JMS 發(fā)送消息慢的解決方法
- Spring Jms 模塊案例講解
相關(guān)文章
java foreach循環(huán)為什么不能賦值的講解
這篇文章主要介紹了java foreach循環(huán)為什么不能賦值的講解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
java計(jì)算兩個日期之間相差天數(shù)的4種方法詳解
這篇文章主要給大家介紹了關(guān)于java計(jì)算兩個日期之間相差天數(shù)的4種方法,本文簡短地介紹java中多種方式求兩個日期的差量,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
mybatis Plus 多表聯(lián)合查詢的實(shí)現(xiàn)示例
這篇文章主要介紹了mybatis Plus 多表聯(lián)合查詢的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Java編程中隨機(jī)數(shù)的生成方式總結(jié)
在Java中利用自帶的類庫可以有三種途徑可以產(chǎn)生隨機(jī)數(shù),這里我們舉了一些簡單的例子來進(jìn)行Java編程中隨機(jī)數(shù)的生成方式總結(jié),需要的朋友可以參考下2016-05-05
Java 并發(fā)編程學(xué)習(xí)筆記之Synchronized底層優(yōu)化
這篇文章主要介紹了Java 并發(fā)編程學(xué)習(xí)筆記之Synchronized底層優(yōu)化的相關(guān)資料,主要包含了重量級鎖,輕量級鎖,偏向鎖和其他優(yōu)化等方面,有需要的小伙伴可以參考下2016-05-05

