Apache ActiveMQ™ is the most popular open source, multi-protocol, Java-based messaging server . It supports industry standard protocols so users get the benefits of client choices across a broad range of languages and platforms. Connectivity from C, C++, Python, .Net, and more is available. Integrate your multi-platform applications using the ubiquitous AMQP protocol. Exchange messages between your web applications using STOMP over websockets. Manage your IoT devices using MQTT . Support your existing JMS infrastructure and beyond. ActiveMQ offers the power and flexibility to support any messaging use-case.
There are currently two “flavors” of ActiveMQ available - the “classic” 5.x broker and the “next generation” Artemis broker. Once Artemis reaches a sufficient level of feature parity with the 5.x code-base it will become ActiveMQ 6. Initial migration documentation is available.
Active MQ 03 整合SpringBoot 配置文件 POM 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 <?xml version="1.0" encoding="UTF-8"?> <project xmlns ="http://maven.apache.org/POM/4.0.0" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelVersion > 4.0.0</modelVersion > <parent > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-parent</artifactId > <version > 2.2.3.BUILD-SNAPSHOT</version > <relativePath /> </parent > <groupId > com.mashibing.arika</groupId > <artifactId > mq</artifactId > <version > 0.0.1-SNAPSHOT</version > <name > mq</name > <description > Demo project for Spring Boot</description > <properties > <java.version > 1.8</java.version > </properties > <dependencies > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-test</artifactId > <scope > test</scope > <exclusions > <exclusion > <groupId > org.junit.vintage</groupId > <artifactId > junit-vintage-engine</artifactId > </exclusion > </exclusions > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-activemq</artifactId > </dependency > <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-web</artifactId > </dependency > <dependency > <groupId > org.messaginghub</groupId > <artifactId > pooled-jms</artifactId > </dependency > <dependency > <groupId > org.apache.commons</groupId > <artifactId > commons-pool2</artifactId > </dependency > </dependencies > <build > <plugins > <plugin > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-maven-plugin</artifactId > </plugin > </plugins > </build > <repositories > <repository > <id > spring-milestones</id > <name > Spring Milestones</name > <url > https://repo.spring.io/milestone</url > </repository > <repository > <id > spring-snapshots</id > <name > Spring Snapshots</name > <url > https://repo.spring.io/snapshot</url > <snapshots > <enabled > true</enabled > </snapshots > </repository > </repositories > <pluginRepositories > <pluginRepository > <id > spring-milestones</id > <name > Spring Milestones</name > <url > https://repo.spring.io/milestone</url > </pluginRepository > <pluginRepository > <id > spring-snapshots</id > <name > Spring Snapshots</name > <url > https://repo.spring.io/snapshot</url > <snapshots > <enabled > true</enabled > </snapshots > </pluginRepository > </pluginRepositories > </project >
yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 server: port: 80 spring: activemq: broker-url: tcp://localhost:61616 user: admin password: admin pool: enabled: true max-connections: 5 idle-timeout: 0 packages: trust-all: true jms: pub-sub-domain: true
Config类 用于生产ConnectionFactory
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package com.mashibing.arika;import javax.jms.ConnectionFactory;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.jms.annotation.EnableJms;import org.springframework.jms.config.DefaultJmsListenerContainerFactory;import org.springframework.jms.config.JmsListenerContainerFactory;@Configuration @EnableJms public class ActiveMqConfig { @Bean public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) { DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setPubSubDomain(true ); bean.setConnectionFactory(activeMQConnectionFactory); return bean; } @Bean public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ConnectionFactory activeMQConnectionFactory) { DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setConnectionFactory(activeMQConnectionFactory); return bean; } }
收 1 2 3 4 5 6 7 8 9 10 @JmsListener (destination = "user" ,containerFactory = "jmsListenerContainerQueue" ) public void receiveStringQueue (String msg) { System.out.println("接收到消息...." + msg); } @JmsListener (destination = "ooo" ,containerFactory = "jmsListenerContainerTopic" ) public void receiveStringTopic (String msg) { System.out.println("接收到消息...." + msg); }
发 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 package com.mashibing.arika;import java.util.ArrayList;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageProducer;import javax.jms.Queue;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.command.ActiveMQQueue;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jms.core.JmsMessagingTemplate;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Service;@Service public class MqProducerService { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; public void sendStringQueue (String destination, String msg) { System.out.println("send..." ); ActiveMQQueue queue = new ActiveMQQueue(destination); jmsMessagingTemplate.afterPropertiesSet(); ConnectionFactory factory = jmsMessagingTemplate.getConnectionFactory(); try { Connection connection = factory.createConnection(); connection.start(); Session session = connection.createSession(true , Session.AUTO_ACKNOWLEDGE); Queue queue2 = session.createQueue(destination); MessageProducer producer = session.createProducer(queue2); TextMessage message = session.createTextMessage("hahaha" ); producer.send(message); } catch (JMSException e) { e.printStackTrace(); } jmsMessagingTemplate.convertAndSend(queue, msg); } public void sendStringQueueList (String destination, String msg) { System.out.println("xxooq" ); ArrayList<String> list = new ArrayList<>(); list.add("1" ); list.add("2" ); jmsMessagingTemplate.convertAndSend(new ActiveMQQueue(destination), list); } }