SpringBoot中的嵌入式ActiveMQ
说明
本篇是使用内存方式的ActiveMQ消息队列方案,不需要安装额外的软件,直接在程序里运行,不需要维护,适合小型的消息队列处理
实现
1、引入jar包
org.springframework.boot
spring-boot-starter-activemq
org.apache.activemq
activemq-pool
2、在项目启动类里添加JMS支持
@SpringBootApplication
@EnableJms
public class DemoApplication {public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3、添加生产者
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;
import javax.jms.Destination;
@Service
public class Producer {@Autowired
private JmsMessagingTemplate jmsTemplate;
// 发送消息,destination是发送到的队列,message是待发送的消息
public void sendMessage(Destination destination, final Object message) {
jmsTemplate.convertAndSend(destination, message);
}}
4、添加两个消费者 4.1 消费者1
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class Consumer1{private final Logger logger = LoggerFactory.getLogger(this.getClass());
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "message.queue")
public void receiveQueue(String text) {
logger.info("发送消息:"+text);
}}
4.2 消费者2
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class Consumer2 {private final Logger logger = LoggerFactory.getLogger(this.getClass());
// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息
@JmsListener(destination = "log.queue")
public void receiveQueue(String text) {
logger.info("发送日志:"+text);
}}
5、添加测试类
import org.apache.activemq.command.ActiveMQQueue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.jms.Destination;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class ProducerTest {private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private Producer producer;
@Test
public void sendMessage() {Destination message = new ActiveMQQueue("message.queue");
Destination log = new ActiveMQQueue("log.queue");
producer.sendMessage(message, "生产者发送了消息");
producer.sendMessage(log, "生产者发送了日志");
}
}
其它说明 【SpringBoot中的嵌入式ActiveMQ】1、可以在配置文件添加连接池等,但是会报错没有研究
2、不能发送对象,需要转为String类型发送
推荐阅读
- 热闹中的孤独
- JS中的各种宽高度定义及其应用
- Activiti(一)SpringBoot2集成Activiti6
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- Android中的AES加密-下
- 放下心中的偶像包袱吧
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- SpringBoot调用公共模块的自定义注解失效的解决
- C语言浮点函数中的modf和fmod详解