日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 配置jmstemplate_SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解...

發布時間:2025/3/15 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 配置jmstemplate_SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.導入jar包:

org.springframework.boot

spring-boot-starter-activemq

org.apache.activemq

activemq-pool

2.填寫配置文件(application.properties)

#設置JMS(AMQ)

spring.activemq.broker-url=tcp://localhost:61616

spring.activemq.user=admin

spring.activemq.password=admin

spring.activemq.pool.enabled=true

#spring.jms.pub-sub-domain=true

spring.activemq.pool.max-connections=50

spring.activemq.pool.expiry-timeout=10000

spring.activemq.pool.idle-timeout=30000

上面需要注意的是,如果開啟訂閱者和發布者模式下面的代碼會使監聽器失效。

3.編寫控制器代碼

@RestController

@RequestMapping("/Jms")

public class ProducerController {

@Autowired

private JmsProducerService jmsProducerService;

@RequestMapping("/send")

public void contextLoads() throws InterruptedException {

Destination destination = new ActiveMQQueue("mytest.queue");

for(int i=0; i<10; i++){

jmsProducerService.sendMessage(destination, "我是超人啊");

}

System.out.println("發送成功");

}

}

4.服務層代碼:

package com.zzf.finals.service.impl;

import com.zzf.finals.service.JmsProducerService;

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

import org.springframework.jms.core.JmsTemplate;

import org.springframework.stereotype.Service;

import javax.jms.Destination;

@Service

public class JmsProducerServiceImpl implements JmsProducerService {

@Autowired

private JmsTemplate jmsTemplate;

@Override

public void sendMessage(Destination destination, String message) {

this.jmsTemplate.convertAndSend(destination,message);

}

}

5.最后加上監聽器類

package com.zzf.finals.domain;

import org.springframework.jms.annotation.JmsListener;

import org.springframework.stereotype.Component;

@Component

public class Consumer {

@JmsListener(destination = "mytest.queue")

public void receiveQueue(String text) {

System.out.println("Message:"+text);

}

}

OK~

但是這樣有另外一個問題:如果開啟了訂閱者和發布者模式則無法發送和接收queue消息。

這里我提供兩種寫法xml和java配置:

首先貼上我的xml配置代碼

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd">

destroy-method="stop">

tcp://localhost:61616

JavaConfig配置為:

package com.zzf.finals.domain;

import org.apache.activemq.command.ActiveMQQueue;

import org.apache.activemq.command.ActiveMQTopic;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jms.config.DefaultJmsListenerContainerFactory;

import org.springframework.jms.config.JmsListenerContainerFactory;

import javax.jms.ConnectionFactory;

import javax.jms.Queue;

import javax.jms.Topic;

@Configuration

public class JmsConfig {

public final static String TOPIC = "topic.test";

public final static String QUEUE = "queue.test";

@Bean

public Queue queue() {

return new ActiveMQQueue(QUEUE);

}

@Bean

public Topic topic() {

return new ActiveMQTopic(TOPIC);

}

// topic模式的ListenerContainer

@Bean

public JmsListenerContainerFactory> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {

DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();

bean.setPubSubDomain(true);

bean.setConnectionFactory(activeMQConnectionFactory);

return bean;

}

// queue模式的ListenerContainer

@Bean

public JmsListenerContainerFactory> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) {

DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();

bean.setConnectionFactory(activeMQConnectionFactory);

return bean;

}

}

控制臺代碼為:

package com.zzf.finals.controller;

import com.zzf.finals.service.JmsProducerService;

import org.apache.activemq.command.ActiveMQQueue;

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

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

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

import javax.jms.Destination;

import javax.jms.Queue;

import javax.jms.Topic;

@RestController

@RequestMapping("/Jms")

public class ProducerController {

@Autowired

private JmsProducerService jmsProducerService;

@Autowired

private Topic topic;

@Autowired

private Queue queue;

@Autowired

private Topic destinationTopic;

@Autowired

private Queue destinationQueue;

@RequestMapping("/send3")

public void testJms2() {

for (int i=0;i<10;i++) {

jmsProducerService.sendMessage(destinationQueue,"queue,world!" + i);

jmsProducerService.sendMessage(destinationTopic, "topic,world!" + i);

}

}

@RequestMapping("/send2")

public void testJms() {

for (int i=0;i<10;i++) {

jmsProducerService.sendMessage(queue,"queue,world!" + i);

jmsProducerService.sendMessage(topic, "topic,world!" + i);

}

}

@RequestMapping("/send")

public void contextLoads() throws InterruptedException {

Destination destination = new ActiveMQQueue("mytest.queue");

for(int i=0; i<10; i++){

jmsProducerService.sendMessage(destination, "我是超人啊");

}

System.out.println("發送成功");

}

}

最后的監聽器類:

package com.zzf.finals.domain;

import org.springframework.jms.annotation.JmsListener;

import org.springframework.stereotype.Component;

@Component

public class Consumer {

@JmsListener(destination = "mytest.queue")

public void receiveQueue(String text) {

System.out.println("Message:"+text);

}

@JmsListener(destination = JmsConfig.TOPIC,containerFactory = "jmsListenerContainerTopic")

public void onTopicMessage(String msg) {

System.out.println("topic:"+msg);

}

@JmsListener(destination = JmsConfig.QUEUE,containerFactory = "jmsListenerContainerQueue")

public void onQueueMessage(String msg) {

System.out.println("queue:"+msg);

}

@JmsListener(destination = "spring-topic",containerFactory = "TopicContainers")

public void onTopicMessageXML(String msg) {

System.out.println("topic1:"+msg);

}

@JmsListener(destination = "spring-topic",containerFactory = "TopicContainers")

public void onTopicMessageXML2(String msg) {

System.out.println("topic2:"+msg);

}

@JmsListener(destination = "spring-queue",containerFactory = "QueueContainers")

public void onQueueMessageXML(String msg) {

System.out.println("queue:"+msg);

}

}

OK~JmsTemplate的使用和配置Demo就完成了 ,有興趣的可以自己跑下試試

總結

到此這篇關于SpringBoot集成JmsTemplate(隊列模式和主題模式)及xml和JavaConfig配置詳解的文章就介紹到這了,更多相關SpringBoot集成JmsTemplate內容請搜索聚米學院以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持聚米學院!

總結

以上是生活随笔為你收集整理的java 配置jmstemplate_SpringBoot集成JmsTemplate(队列模式和主题模式)及xml和JavaConfig配置详解...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。