消息中间件介绍
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性[架构] 使用较多的消息队列有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