Tabla de contenido
Instalar y ejecutar ActiveMQ en Linux
Ingrese a la página de administración de activemq
SpringBoot integra el modo de cola ActiveMQ
Prueba de envío de información al canal.
SpringBoot integra el modo de tema ActiveMQ
Prueba enviando un mensaje para entrar al tema
Introducción
¿Qué es ActiveMQ?
Message Queue es un método de comunicación asincrónica entre procesos o subprocesos. Al utilizar una cola de mensajes, el productor de mensajes guardará el mensaje en la cola de mensajes hasta que el consumidor del mensaje lo recoja. Realizar el desacoplamiento de servicios y mejorar la confiabilidad y escalabilidad del sistema.
En la actualidad, existen muchas colas de mensajes de código abierto de uso común, como RabbitMQ, ActiveMQ, Redis, Kafka, etc., que a menudo se denominan middleware de mensajes.
Este artículo toma Apache ActiveMQ como ejemplo para integrar el modo de cola y el modo de transmisión de ActiveMQ y es compatible con ambos.
El concepto de JMS
JMS
JMS, la interfaz de programación de aplicaciones del servicio de mensajes Java, es una API de middleware orientada a mensajes (MOM) en la plataforma Java, que se utiliza para enviar mensajes entre dos aplicaciones o en un sistema distribuido para comunicación asincrónica. Java Message Service es una API independiente de la plataforma y la mayoría de los proveedores de middleware brindan soporte para JMS. La relación entre JMS y ActiveMQ es similar a la relación entre JDBC y los controladores JDBC. .
JMS incluye dos modelos de mensajes: punto a punto y publicador/suscriptor;
punto a punto: – El remitente del mensaje envía el mensaje, el agente del mensaje lo coloca en una cola y el receptor del mensaje obtiene el contenido del mensaje de la cola. Después de leer el mensaje, se elimina de la cola – El mensaje tiene solo un remitente y un receptor, pero eso no significa que solo pueda haber un receptor Publicar y suscribirse: –
El remitente (editor) envía el mensaje a el tema, y varios receptores (suscriptores) escuchan (suscriben) este tema, entonces el mensaje se recibirá al mismo tiempo cuando llegue el mensaje
JMS define una interfaz unificada para unificar las operaciones de mensajes;
JMS restringe el uso del lenguaje Java;
JMS especifica dos modelos de mensajes; y el modelo de mensajes de AMQP es más rico.
Instalar y ejecutar ActiveMQ en Linux
Enlace: https://pan.baidu.com/s/1tZSs6iefzKVLHSwxihQ3Nw?pwd=1234
Código de extracción: 1234
//复制到虚拟机,解压出来
tar -zxvf apache-activemq-5.14.5-bin.tar.gz
//解压完成之后,进入文件/bin目录下
cd apache-activemq-5.14.5/bin
//启动activemq
./activemq start
Comenzó con éxito
Aviso:
Desactivar el cortafuegos
Ingrese a la página de administración de activemq
http://su propia dirección IP: 8161 / para ingresar a la página de administración de ActiveMQ
Ingrese la contraseña de la cuenta: admin
SpringBoot integra el modo de cola ActiveMQ
versión de springboot: 2.3.4.RELEASE
Aviso:
Modo de cola:
El modo de cola puede entenderse como un modo de primero en entrar, primero en salir: después de que el productor publica el mensaje, lo almacena en la cola y espera a que el oyente lo reciba. ¡El oyente recibirá la información en la cola cuando esté en línea! Pero tan pronto como se reciba, la información de la cola desaparecerá.
productor
dependencia de pom
<!-- ActiveMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Configurar yml
spring:
activemq:
broker-url: tcp://自己的activemq服务器ip:61616
packages:
#配置信任所有的包,这个配置为了支持发送对象消息
trust-all: true
user: admin
password: admin
clase de inicio
@SpringBootApplication
@EnableJms #开启JMS
public class SpringBootThree {
public static void main(String[] args) {
SpringApplication.run(SpringBootThree.class,args);
}
}
Configurar canales
/**
* 专门配置mq通道的配置类
*/
@Configuration
public class QueueConfig {
@Bean(name = "queueName")
Queue queueName(){
return new ActiveMQQueue("test_queue");
}
}
Prueba de envío de información al canal.
@SpringBootTest
public class RedisTest {
@Autowired
JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
Queue queueName;
@Test
public void test5(){
String message="我是发送消息的人,听得到吗";
jmsMessagingTemplate.convertAndSend(queueName, message);
}
}
recipiente
dependencia de pom
<!-- ActiveMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
configuración yml
server:
port: 10006
spring:
activemq:
broker-url: tcp://自己的activemq服务器的ip:61616
packages:
#配置信任所有的包,这个配置为了支持发送对象消息
trust-all: true
user: admin
password: admin
clase de inicio
@SpringBootApplication
public class ConsumerMain10006 {
public static void main(String[] args) {
SpringApplication.run(ConsumerMain10006.class,args);
}
}
Aceptar clase mq
/**
* 用于监听MQ
*/
@Component
public class MQConfig {
@JmsListener(destination = "test_queue")
public void onMessage(String message){
System.out.print(message)
//获取到消息后可以干一些事情
}
}
SpringBoot integra el modo de tema ActiveMQ
Aviso:
La diferencia entre el modo de tema y el modo de cola:
1. Los mensajes publicados en modo tema se pueden distribuir a todos los suscriptores.
2. El modo de tema es un modo de publicación-suscripción. Solo cuando el suscriptor (clase de escucha) está en línea, se puede recibir el mensaje. Si la conexión está en el medio, no se puede recibir el mensaje anterior y solo se puede recibir la información posterior. ¡ser recibido!
productor
El pom, yml, la clase de inicio y el modo de cola del productor son los mismos
Crear canal temático
/**
* 专门配置mq通道的配置类
*/
@Configuration
public class QueueConfig {
@Bean(name = "queueName")
Queue queueName(){
return new ActiveMQQueue("test_queue");
}
//主题(发布\订阅模式)通道
@Bean(name="queueFind")
Topic queueFind(){
return new ActiveMQTopic("cctv");
}
}
Prueba enviando un mensaje para entrar al tema
@SpringBootTest
public class RedisTest {
@Autowired
JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
Queue queueName;
@Autowired
Topic queueFind;
@Test
public void test5(){
String message="我是发送消息的人,你接受我就没了";
jmsMessagingTemplate.convertAndSend(queueName, message);
}
@Test
public void test6(){
String message="我是主题可以发布所有监听我的人,但是我发布你必须在线";
jmsMessagingTemplate.convertAndSend(queueFind, message);
}
}
recipiente
pom es lo mismo que la cola de clases de inicio
yaml
spring:
activemq:
broker-url: tcp://自己acvtvemq服务器的ip:61616
packages:
#配置信任所有的包,这个配置为了支持发送对象消息
trust-all: true
user: admin
password: admin
#开启主题策略,默认是关闭 开启主题模式
jms:
pub-sub-domain: true
clase receptora
/**
* 用于监听MQ
*/
@Component
public class MQConfig {
@JmsListener(destination = "test_queue")
public void onMessage(String message){
System.out.print(message)
//获取到消息后可以干一些事情
}
@JmsListener(destination = "cctv")
public void cctv(String message){
System.out.print(message)
//获取到消息后可以干一些事情
}
}