Оглавление
Установите и запустите ActiveMQ в Linux
Войдите на страницу управления activemq
SpringBoot интегрирует режим очереди ActiveMQ
Тестовая отправка информации в канал
SpringBoot интегрирует режим темы ActiveMQ
Тестовая отправка сообщения для входа в тему
Введение
Что такое ActiveMQ
Очередь сообщений — это асинхронный метод связи между процессами или потоками. Используя очередь сообщений, производитель сообщений будет сохранять сообщение в очереди сообщений до тех пор, пока потребитель сообщения не заберет его. Реализуйте разделение услуг и улучшите надежность и масштабируемость системы.
В настоящее время существует множество широко используемых очередей сообщений с открытым исходным кодом, таких как RabbitMQ, ActiveMQ, Redis, Kafka и т. д., которые часто называют промежуточным программным обеспечением сообщений.
В этой статье в качестве примера используется Apache ActiveMQ для интеграции режима очереди и режима широковещания ActiveMQ, и он совместим с обоими.
Концепция JMS
JMS
JMS, интерфейс прикладного программирования службы сообщений Java, представляет собой API-интерфейс промежуточного программного обеспечения, ориентированного на сообщения (MOM), на платформе Java, используемый для отправки сообщений между двумя приложениями или в распределенной системе для асинхронной связи. Служба сообщений Java — это API-интерфейс, независимый от платформы, и большинство поставщиков промежуточного программного обеспечения обеспечивают поддержку JMS. Отношения между JMS и ActiveMQ аналогичны отношениям между JDBC и драйверами JDBC. .
JMS включает две модели сообщений: «точка-точка» и «издатель/подписчик»; «
точка-точка»: – отправитель сообщения отправляет сообщение, агент сообщений помещает его в очередь, а получатель сообщения получает содержимое сообщения из очереди. После того, как сообщение прочитано, оно удаляется из очереди – У сообщения только один отправитель и получатель, но это не означает, что может быть только один получатель. Публикация и подписка: – Отправитель (издатель) отправляет
сообщение тему, и несколько получателей (подписчиков) слушают (подписываются) эту тему, то сообщение будет получено одновременно с приходом сообщения
JMS определяет унифицированный интерфейс для унификации операций с сообщениями;
JMS ограничивает использование языка Java;
JMS определяет две модели сообщений; а модель сообщений AMQP более богата.
Установите и запустите ActiveMQ в Linux
Ссылка: https://pan.baidu.com/s/1tZSs6iefzKVLHSwxihQ3Nw?pwd=1234
Код извлечения: 1234
//复制到虚拟机,解压出来
tar -zxvf apache-activemq-5.14.5-bin.tar.gz
//解压完成之后,进入文件/bin目录下
cd apache-activemq-5.14.5/bin
//启动activemq
./activemq start
Началось успешно
Уведомление:
Отключить брандмауэр
Войдите на страницу управления activemq
http://ваш собственный IP-адрес: 8161 / для входа на страницу управления ActiveMQ
Введите пароль учетной записи: admin
SpringBoot интегрирует режим очереди ActiveMQ
версия Springboot: 2.3.4.RELEASE
Уведомление:
Режим очереди:
Режим очереди можно понимать как режим «первым пришел — первым обслужен».После того как производитель публикует сообщение, оно сохраняется в очереди и ждет, пока его получит слушатель. Слушатель получит информацию в очереди, когда она появится в сети! Но как только она будет получена, информация в очереди исчезнет.
режиссер
зависимость от помпа
<!-- 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>
Настроить YML
spring:
activemq:
broker-url: tcp://自己的activemq服务器ip:61616
packages:
#配置信任所有的包,这个配置为了支持发送对象消息
trust-all: true
user: admin
password: admin
Стартап-класс
@SpringBootApplication
@EnableJms #开启JMS
public class SpringBootThree {
public static void main(String[] args) {
SpringApplication.run(SpringBootThree.class,args);
}
}
Настроить каналы
/**
* 专门配置mq通道的配置类
*/
@Configuration
public class QueueConfig {
@Bean(name = "queueName")
Queue queueName(){
return new ActiveMQQueue("test_queue");
}
}
Тестовая отправка информации в канал
@SpringBootTest
public class RedisTest {
@Autowired
JmsMessagingTemplate jmsMessagingTemplate;
@Autowired
Queue queueName;
@Test
public void test5(){
String message="我是发送消息的人,听得到吗";
jmsMessagingTemplate.convertAndSend(queueName, message);
}
}
получатель
зависимость от помпа
<!-- ActiveMQ -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
конфигурация YML
server:
port: 10006
spring:
activemq:
broker-url: tcp://自己的activemq服务器的ip:61616
packages:
#配置信任所有的包,这个配置为了支持发送对象消息
trust-all: true
user: admin
password: admin
Стартап-класс
@SpringBootApplication
public class ConsumerMain10006 {
public static void main(String[] args) {
SpringApplication.run(ConsumerMain10006.class,args);
}
}
Принять класс mq
/**
* 用于监听MQ
*/
@Component
public class MQConfig {
@JmsListener(destination = "test_queue")
public void onMessage(String message){
System.out.print(message)
//获取到消息后可以干一些事情
}
}
SpringBoot интегрирует режим темы ActiveMQ
Уведомление:
Разница между режимом темы и режимом очереди:
1. Сообщения, опубликованные в режиме темы, могут быть распространены среди всех подписчиков.
2. Режим темы - это режим публикации-подписки. Только когда подписчик (класс прослушивания) находится в сети, сообщение может быть получено. Если соединение находится посередине, предыдущее сообщение не может быть получено, и может быть доступна только последующая информация. быть принятым!
режиссер
Pom, yml, класс запуска и режим очереди производителя одинаковы.
Создать тематический канал
/**
* 专门配置mq通道的配置类
*/
@Configuration
public class QueueConfig {
@Bean(name = "queueName")
Queue queueName(){
return new ActiveMQQueue("test_queue");
}
//主题(发布\订阅模式)通道
@Bean(name="queueFind")
Topic queueFind(){
return new ActiveMQTopic("cctv");
}
}
Тестовая отправка сообщения для входа в тему
@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);
}
}
получатель
pom — это то же самое, что и очередь классов запуска.
ямл
spring:
activemq:
broker-url: tcp://自己acvtvemq服务器的ip:61616
packages:
#配置信任所有的包,这个配置为了支持发送对象消息
trust-all: true
user: admin
password: admin
#开启主题策略,默认是关闭 开启主题模式
jms:
pub-sub-domain: true
Приемный класс
/**
* 用于监听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)
//获取到消息后可以干一些事情
}
}