RabbitMQ入门,springboot整合RabbitMQ

周末的两天没有写文章,因为项目分离出来了一个权限管理平台,花了一点时间整理项目,同时完成了一些功能的开发。

今天这篇文章介绍一下RabbitMQ这个消息中间件,以及通过springboot整合RabbitMQ。

目录

一、初步了解RabbitMQ

二、windows中安装RabbitMQ

三、启动RabbitMQ

四、springboot整合RabbitMQ

1、创建一个springboot项目

2、pom.xml添加以下依赖

3、修改配置文件application.yml

4、新建RabbitMQ的配置类

5、新建消息生产者

6、创建一个消息消费者

7、创建控制器

8、测试发送消息


一、初步了解RabbitMQ

首先,我们找到RabbitMQ的官网,一般官网会有详细的介绍

RabbitMQ官网https://www.rabbitmq.com/点击以下链接访问rabbitmq官网,rabbitmq的图标是一只兔子头,页面的下方都是介绍rabbitmq多么多么厉害,不用看它ovo(主打一个商业吹捧)

RabbitMQ入门,springboot整合RabbitMQ_第1张图片

我们点击右上方的菜单Features开始我们今天的兔子MQ学习~

RabbitMQ入门,springboot整合RabbitMQ_第2张图片

 上面介绍了一下RabbitMQ的特性:

1、异步消息传递:

支持多种消息传递协议、消息队列、传递确认、灵活的队列路由、多种交换类型。

2、开发人员经验:

使用 Kubernetes、BOSH、Chef、Docker 和 Puppet 进行部署。使用最喜欢的编程语言开发跨语言消息传递,如 Java、.NET、PHP、Python、JavaScript、Ruby、Go 等: Java、.NET、PHP、Python、JavaScript、Ruby、Go 等。

3、分布式部署:

以集群形式部署,实现高可用性和高吞吐量;跨多个可用区和区域联合部署。

4、企业和云就绪:

可插入式身份验证和授权,支持 TLS 和 LDAP。轻量级,易于在公共云和私有云中部署。

5、工具和插件:

各种工具和插件支持持续集成、运营指标以及与其他企业系统的集成。灵活的插件方法可扩展 RabbitMQ 功能。

6、管理和监控

用于管理和监控 RabbitMQ 的 HTTPAPI、命令行工具和用户界面。

官网的英文看不懂?推荐全世界最准确的翻译:deepl,作为一个程序员,你不会还连这个都不知道吧?赶紧收藏一下网址~

二、windows中安装RabbitMQ

简单的了解RabbitMQ的特性后,点击右上角的菜单Docs开始学习如何使用RabbitMQ吧。

RabbitMQ入门,springboot整合RabbitMQ_第3张图片

点击红框内的红色字体下载链接 Downloads and Installation下载RabbitMQ;

点击下图中蓝框内的链接分别下载RabbitMQ和erlang,安装RabbitMQ之前需要先完成erlang的安装。

RabbitMQ入门,springboot整合RabbitMQ_第4张图片

安装过程就不介绍了,一直下一步、下一步就行了。

安装完成后,可以点开我们的安装目录RabbitMQ Server看一下

RabbitMQ入门,springboot整合RabbitMQ_第5张图片

有个sbin目录,存放的是一些命令工具,etc点开看一下,有一个readme

In this directory you can find an example configuration file for RabbitMQ.

Note that this directory is *not* where the real RabbitMQ configuration lives.

The default location for the real configuration file is %APPDATA%\RabbitMQ\rabbitmq.config.

%APPDATA% usually expands to C:\Users\%USERNAME%\AppData\Roaming or similar.

这个文件内容告诉了我们RabbitMQ的配置文件的位置

C:\Users\%USERNAME%\AppData\Roaming\RabbitMQ\rabbitmq.config

我们访问这个路径C:\Users\%USERNAME%\AppData\Roaming,发现这个目录下确实存放了一个RabbitMQ目录,目录下有一个advanced.config文件。

三、启动RabbitMQ

好了,接下来我们通过命令启动RabbitMQ,在这之前,需要把erlang的安装目录添加到系统的Path环境变量中。

RabbitMQ入门,springboot整合RabbitMQ_第6张图片

 然后进到RabbitMQ的安装目录下的sbin目录下,在地址栏输入cmd,打开命令窗口

rabbitmq-plugins enable rabbitmq_management

 如图,只要没报错就是启动成功了

RabbitMQ入门,springboot整合RabbitMQ_第7张图片

接着,我们通过http://localhost:15672 访问RabbitMQ的控制台,这里的用户名/密码都是guest

RabbitMQ入门,springboot整合RabbitMQ_第8张图片

登陆进去之后,就能看到这样一个页面

RabbitMQ入门,springboot整合RabbitMQ_第9张图片

四、springboot整合RabbitMQ

1、创建一个springboot项目

创建一个springboot项目,命名为rabbitmq

RabbitMQ入门,springboot整合RabbitMQ_第10张图片

2、pom.xml添加以下依赖


    org.springframework.boot
    spring-boot-starter-amqp

完整的pom.xml如下



    4.0.0

    
        org.springframework.boot
        spring-boot-starter-parent
        2.3.4.RELEASE
        
    

    com.example
    rabbitmq
    0.0.1-SNAPSHOT

    
        1.8
        1.18.22
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.projectlombok
            lombok
            ${lombok.version}
        

        
            org.springframework.boot
            spring-boot-starter-amqp
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

3、修改配置文件application.yml

spring:
  application:
    name: rabbitmq
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
    virtual-host: /

server:
  port: 8088

logging:
  level: 
    com.example.rabbitmq: debug

4、新建RabbitMQ的配置类

项目根目录下创建config包,在config包下创建一个类RabbitMQConfig.java

package com.example.rabbitmq.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author heyunlin
 * @version 1.0
 */
@Configuration
public class RabbitMQConfig {
    // 声明需要使用的交换机/路由Key/队列的名称
    public static final String DEFAULT_EXCHANGE = "exchange";
    public static final String DEFAULT_ROUTE = "route";
    public static final String DEFAULT_QUEUE = "queue";

    // 声明交换机,需要几个声明几个,这里就一个
    @Bean
    public DirectExchange exchange(){
        return new DirectExchange(DEFAULT_EXCHANGE);
    }

    // 声明队列,需要几个声明几个,这里就一个
    @Bean
    public Queue queue(){
        return new Queue(DEFAULT_QUEUE);
    }

    // 声明路由Key(交换机和队列的关系),需要几个声明几个,这里就一个
    @Bean
    public Binding binding(){
        return BindingBuilder.bind(queue()).to(exchange())
                .with(DEFAULT_ROUTE);
    }

}

5、新建消息生产者

项目根目录下创建producer包,在producer包下创建一个类RabbitProducer.java

package com.example.rabbitmq.producer;

import com.example.rabbitmq.config.RabbitMQConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author heyunlin
 * @version 1.0
 */
@Component
public class RabbitProducer {
    private final RabbitTemplate rabbitTemplate;

    @Autowired
    public RabbitProducer(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    /**
     * 发送消息
     * @param message 消息内容
     */
    public void sendMessage(Object message) {
        rabbitTemplate.convertAndSend(RabbitMQConfig.DEFAULT_EXCHANGE, RabbitMQConfig.DEFAULT_ROUTE, message);
    }

}

6、创建一个消息消费者

项目根目录下创建consumer包,在producer包下创建一个类RabbitConsumer.java

package com.example.rabbitmq.consumer;

import com.example.rabbitmq.config.RabbitMQConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author heyunlin
 * @version 1.0
 */
@Slf4j
@Component
@RabbitListener(queues = RabbitMQConfig.DEFAULT_QUEUE)
public class RabbitConsumer {

    @RabbitHandler
    public void receive(Object message) {
        log.debug("收到一条消息:{}", message);
    }

}

7、创建控制器

项目根目录下创建controller包,在controller包下创建一个类MessageController.java,把我们刚刚创建的消息生产者依赖进来。

package com.example.rabbitmq.controller;

import com.example.rabbitmq.producer.RabbitProducer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author heyunlin
 * @version 1.0
 */
@RestController
@RequestMapping(path = "/message", produces = "application/json;charset=utf-8")
public class MessageController {
    private final RabbitProducer producer;

    @Autowired
    public MessageController(RabbitProducer producer) {
        this.producer = producer;
    }

    @RequestMapping(value = "/send", method = RequestMethod.POST)
    public void sendMessage(Object message) {
        producer.sendMessage(message);
    }

}

8、测试发送消息

这里可以使用多种方式测试,为了方便起见,使用postman

RabbitMQ入门,springboot整合RabbitMQ_第11张图片

一测试居然报错了,查看后台报错信息,说是简单的消息转换器只支持String类型和字节数组的消息

RabbitMQ入门,springboot整合RabbitMQ_第12张图片

我们回到上面,把消息类型的参数都改成String的,改完再测试一下

RabbitMQ入门,springboot整合RabbitMQ_第13张图片

这一次控制台打印出来了收到消息的日志,至此,springboot整合RabbitMQ完美完成。

文章涉及的代码已同步到gitee,可按需下载

https://gitee.com/he-yunlin/rabbitmq.giticon-default.png?t=N6B9https://gitee.com/he-yunlin/rabbitmq.git

好了,文章就分享到到这里了,创作不易,如果觉得这篇文章对你有所帮助,不要忘了动动你发财的拇指点赞收藏一下哦~

你可能感兴趣的:(spring,boot,java-rabbitmq,rabbitmq)