消息中间件介绍
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
RabbitMQ:AMQP 协议的领导实现,支持多种场景。淘宝的 MySQL 集群内部有使用它进行通讯,OpenStack 开源云平台
的通信组件,最先在金融行业得到运用。
RabbitMQ的下载安装启动:
因为RabbitMQ是Erlang语言写的索引,需要Erlang的支持,这里也需要下载Erlang
下载地址:
Erlang:http://www.erlang.org/downloads
RabbitMQ:https://www.rabbitmq.com/download.html
安装方式:
直接下一步即可,注意安装路径不要有中文。
安装管理界面(插件):
进入rabbitMQ安装目录的sbin目录,输入命令
rabbitmq‐plugins enable rabbitmq_management
启动方式:
安装完管理界面后,开始菜单里面会出现以下应用
点击start启动RabbitMQ服务后,输入http://127.0.0.1:15672
看到此页面,启动成功
SpringBoot整合消息中间件RabbitMQ
1.创建普通maven工程(不选择骨架),导入坐标
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2.完整工程目录
3.配置文件application.yml
spring:
rabbitmq:
host: 127.0.0.1
server:
port: 9202
4.启动类Application.java
package com.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
5.消息生产者MqTest.java
package com.test;
import com.demo.Application;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MqTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSendDirect() {
rabbitTemplate.convertAndSend("testDirect", "直接模式");
}
@Test
public void testSendFanout() {
rabbitTemplate.convertAndSend("testFanout", "", "分列模式");
}
@Test
public void testSendTopic1() {
rabbitTemplate.convertAndSend("topictest", "goods.aaa", "主题模式1");
}
@Test
public void testSendTopic2() {
rabbitTemplate.convertAndSend("topictest", "article.content.log", "主题模式2");
}
@Test
public void testSendTopic3() {
rabbitTemplate.convertAndSend("topictest", "goods.log", "主题模式3");
}
}
6.消息消费者Consumer1.java
package com.demo.customer;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "testDirect")
public class Customer1 {
@RabbitHandler
public void showMessage(String message) {
System.out.println("testDirect接受到消息:" + message);
}
}
Consumer2.java
package com.demo.customer;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "testFanout")
public class Customer2 {
@RabbitHandler
public void showMessage(String message) {
System.out.println("testFanout接受到消息:" + message);
}
}
Consumer3.java
package com.demo.customer;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "test")
public class Customer3 {
@RabbitHandler
public void showMessage(String message) {
System.out.println("test接受到消息:" + message);
}
}
这里目前只是介绍了SpringBoot整合RabbitMQ的方式,如果要完成以上代码测试可以自定在RabbitMQ中添加相应的Queues以及Exchange
来源:CSDN
作者:MB.JJ20W
链接:https://blog.csdn.net/weixin_44486072/article/details/90168409