java 配置jmstemplate_SpringBoot集成JmsTemplate(队列模式和主题模式)(xml和JavaConfig配置实现)-Go语言中文社区...

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);

}

}

5e1e1f8491e43f1ddc5e4442d8ba63a2.png

4ec8f2f5574e7d28b12582b281438747.png

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);

}

}

67130c117e545bcc9b1f7c72f89c4dbe.png

987183f0126a6312e538c0c3dd4bf48c.png

529e130d34487bac188306cf92ab6aaa.png

8b071fe8c79e8ad80d3f4ac2523b6990.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值