springboot集成weblogic的jms

首先需要引入weblogic客户端jar包:

<dependency>
  <groupId>weblogic</groupId>
  <artifactId>wlclient</artifactId>
  <version>1.0.0</version>
</dependency>
wlclient.jar在maven中央仓库是没有资源的,需要手动下载wlclient的jar,然后通过maven命令打入到本地仓库。mvn安装jar到本地仓库的命令为:

mvn install:install-file -Dfile=myArtifact.jar -DgroupId=x.y.z -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=jar -DgeneratePom=true

上线时需要吧该jar放入公司私服,或者是直接做为项目的资源的一部分提交到git'到svn上,如果是作为代码提交到git'或者svn上需要在maven‘的配置中加上而外属性来引入本地的jar 。
<dependency>
  <groupId>weblogic</groupId>
  <artifactId>wlclient</artifactId>
  <version>1.0.0</version>
  <systemPath>${basedir}/path/to/library/wlclient-1.0.0.jar</systemPath>
  <scope>system</scope>
</dependency>

下面为Springboot 中JMS的配置:

package com.sgm.ici.personalization.ms;


import java.util.Properties;


import javax.jms.ConnectionFactory;

import javax.jms.Destination;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jms.core.JmsTemplate;

import org.springframework.jms.listener.DefaultMessageListenerContainer;

import org.springframework.jndi.JndiObjectFactoryBean;

import org.springframework.jndi.JndiTemplate;


import com.sgm.ici.personalization.ms.service.util.MyMessageListener;



@Configuration

public class JmsConfiguration{


private StringuserName ="cmat";

private StringconnectionFactory ="jms/IDMTopicConnectionFactory";

private Stringpassword ="Pass1234";

private Stringtopic ="jms/IDMICITopic";

private Stringurl ="t3://10.203.25.58:7003";

@Autowired

private MyMessageListenermyMessageListener;

@Bean(name ="weblogicJms")

public JndiTemplate weblogicJms(){

Properties props =new Properties();

props.setProperty("java.naming.factory.initial","weblogic.jndi.WLInitialContextFactory");

props.setProperty("java.naming.provider.url",url );

props.setProperty("java.naming.security.principal",userName);

props.setProperty("java.naming.security.credentials",password);

JndiTemplate jmsJndiTemplate =new JndiTemplate();

jmsJndiTemplate.setEnvironment(props);

returnjmsJndiTemplate;

}

@Bean(name ="jmsConnectionFactory")

public JndiObjectFactoryBean jmsConnectionFactory(){

JndiObjectFactoryBean jndiObjectFactoryBean =new JndiObjectFactoryBean();

jndiObjectFactoryBean.setJndiName(connectionFactory);

jndiObjectFactoryBean.setJndiTemplate(weblogicJms());

returnjndiObjectFactoryBean;

}

@Bean(name ="jmsDestination")

public JndiObjectFactoryBean jmsDestination(){

JndiObjectFactoryBean jmsDestination =new JndiObjectFactoryBean();

jmsDestination.setJndiName(topic);

jmsDestination.setJndiTemplate(weblogicJms());

returnjmsDestination;

}

@Bean(name ="listenerTopic")

@ConditionalOnMissingBean

public DefaultMessageListenerContainer listenerTopic(){

DefaultMessageListenerContainer listener = new DefaultMessageListenerContainer();

listener.setConnectionFactory((ConnectionFactory) jmsConnectionFactory().getObject());

listener.setDestination((Destination) jmsDestination().getObject());

listener.setAutoStartup(true);

listener.setPubSubDomain(true);

listener.setMessageListener(myMessageListener);

returnlistener

}

@Bean(name ="jmsTemplate" )

@ConditionalOnMissingBean

public JmsTemplate getJmsTemplate(){

JmsTemplate jmsTemplate =new JmsTemplate();

jmsTemplate.setConnectionFactory((ConnectionFactory) jmsConnectionFactory().getObject());

jmsTemplate.setDefaultDestination((Destination) jmsDestination().getObject());

jmsTemplate.setPubSubDomain(true);

jmsTemplate.setExplicitQosEnabled(true);

returnjmsTemplate;

}

}


因为我的项目中会默认初始化一个JmsTemplate 所以我这里加了@ConditionalOnMissingBean表示在当前上下文中不存在某个对象时,才会实例化一个Bean,不然会导致spring容器中存在两个相同类型的bean而启动报错。我这里采用的订阅topic的模式,当然也可以监听一个queue,

这里我就不做多个解释,其实是一模一样的配置。



MyMessageListener 类异步监听topic内的消息,如果有消息进来会自动消费:


package com.sgm.ici.personalization.ms.service.util;


import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.MessageListener;

import javax.jms.TextMessage;


import org.springframework.stereotype.Component;


@Component

public class MyMessageListenerimplements MessageListener{


@Override

public void onMessage(Message message) {

if (messageinstanceof TextMessage) { 

             try { 

             String msg = ((TextMessage)message).getText();

                    System.out.println("ok--"+msg);

                   //JSONObject.parseObject("",clazz);

             } catch (JMSExceptione) { 

                     thrownew RuntimeException(e); 

             }  

    } else { 

            thrownew IllegalArgumentException( 

                            "Message must be of type TestMessage");  

    }  

}


}


测试JMS类 :

package com.sgm.ici.personalization.ms.controller;



import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.jms.core.JmsTemplate;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;



@Controller

@RequestMapping(value = "/")

public class JmsController {

@Autowired

@Qualifier("jmsTemplate")

private JmsTemplatejmsTemplate;

@RequestMapping(value ="/sendMsg", method = RequestMethod.GET)

@ResponseBody

public Object loginOut(HttpServletRequestreq, HttpServletResponse resp){

jmsTemplate.convertAndSend("hello world   " +System.currentTimeMillis() );

returnnull;

}

}




所有springboot的dependencies:


  <properties>

    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<java.version>1.8</java.version>

<ici.version>0.0.1-SNAPSHOT</ici.version>

<ojdbc6.version>11.2.0.1.0</ojdbc6.version>

<druid.version>1.0.24</druid.version>

<mybatis-spring.version>1.2.0</mybatis-spring.version>

<swagger.version>2.6.1</swagger.version>

<pagehelper.version>1.1.2</pagehelper.version>

<orderby-helper.version>0.0.2</orderby-helper.version>

<mapper-spring-boot.version>1.1.0</mapper-spring-boot.version>

<cglib.version>2.2</cglib.version>

<log4j.version>2.6.2</log4j.version>

<mockito.version>2.6.2</mockito.version>

<auth.center.version>1.0.0-SNAPSHOT</auth.center.version>

<poi.version>3.17</poi.version>

  </properties>

  

  <dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

<exclusions>

<exclusion>

<artifactId>logback-classic</artifactId>

<groupId>ch.qos.logback</groupId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

<dependency>  

    <groupId>com.oracle</groupId>  

    <artifactId>ojdbc6</artifactId>  

    <version>${ojdbc6.version}</version>

</dependency>

<dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>${mybatis-spring.version}</version>

</dependency>

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-test</artifactId>

  <scope>test</scope>

</dependency>

<dependency>

<groupId>io.springfox</groupId>

<artifactId>springfox-swagger2</artifactId>

<version>${swagger.version}</version>

</dependency>

<dependency>

<groupId>io.springfox</groupId>

<artifactId>springfox-swagger-ui</artifactId>

<version>${swagger.version}</version>

</dependency>

<dependency>

<groupId>com.github.pagehelper</groupId>

<artifactId>pagehelper-spring-boot-starter</artifactId>

<version>${pagehelper.version}</version>

<exclusions>

<exclusion>

<artifactId>mybatis-spring-boot-starter</artifactId>

<groupId>org.mybatis.spring.boot</groupId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>tk.mybatis</groupId>

<artifactId>mapper-spring-boot-starter</artifactId>

<version>${mapper-spring-boot.version}</version>

</dependency>

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>${druid.version}</version>

</dependency>

<dependency>

<groupId>cglib</groupId>

<artifactId>cglib-nodep</artifactId>

<version>${cglib.version}</version>

</dependency>

<dependency>

<groupId>org.apache.logging.log4j</groupId>

<artifactId>log4j-core</artifactId>

</dependency>

<dependency>

    <groupId>org.apache.logging.log4j</groupId>

    <artifactId>log4j-slf4j-impl</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.2</version>

</dependency>

<dependency>  

    <groupId>org.mockito</groupId>  

    <artifactId>mockito-core</artifactId>  

    <scope>test</scope>  

</dependency> 

<dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

</dependency>

<dependency>

<groupId>org.apache.commons</groupId>

<artifactId>commons-lang3</artifactId>

<version>3.4</version>

</dependency>

<dependency>

    <groupId>org.springframework</groupId>

    <artifactId>spring-jms</artifactId>

</dependency>

<dependency>    

            <groupId>javax.jms</groupId>    

            <artifactId>jms</artifactId>    

            <version>1.1</version>    

</dependency> 

<dependency>

    <groupId>weblogic</groupId>

    <artifactId>wlthint3client</artifactId>

    <version>10.3.6.0</version>

</dependency>

<dependency>

            <groupId>com.ctrip.framework.apollo</groupId>

            <artifactId>apollo-client</artifactId>

            <version>0.9.0</version>

        </dependency>

  </dependencies>




亲测可用,希望帮到大家,有问题及时反馈,互相进步。




评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值