SpringBoot整合消息中间件RabbitMQ

冷暖自知 提交于 2019-11-30 21:52:58

消息中间件介绍

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!