SpringBoot整合RabbitMQ案例

SpringBoot整合RabbitMQ案例,第1张

SpringBoot整合RabbitMQ案例 SpringBoot整合RabbitMQ 一 .安装RabbitMQ(Windows环境)

第一步:首先下载Erlang环境,因为RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装Rabbit MQ的前提是安装Erlang。
下载地址:https://www.erlang.org/patches/otp-24.1.6

下载安装完后需要配置系统环境变量
此电脑–>鼠标右键“属性”–>高级系统设置–>环境变量–>“新建”系统环境变量

变量名:ERLANG_HOME
变量值就是刚才erlang的安装地址,点击确定。
然后双击系统变量path

点击“新建”,将%ERLANG_HOME%bin加入到path中。

最后windows键+R键,输入cmd,再输入erl,看到版本号就说明erlang安装成功了。
第二步:下载并安装RabbitMQ
下载地址:https://www.rabbitmq.com/download.html

双击下载后的.exe文件进行安装。
RabbitMQ安装好后接下来安装RabbitMQ-Plugins。打开命令行cd,输入RabbitMQ的sbin目录。
我的目录是:D:devToolsRabbitMQrabbitmq_server-3.9.11sbin
然后在后面输入rabbitmq-plugins enable rabbitmq_management命令进行安装
打开命令行命令行,进入RabbitMQ的安装目录: sbin,输入 rabbitmqctl status , 如果出现以下的图,说明安装是成功的,并且说明现在RabbitMQ Server已经启动了,运行正常。

打开sbin目录,双击rabbitmq-server.bat运行MQ

等几秒钟看到这个界面后,访问http://localhost:15672

然后可以看到如下界面

默认用户名和密码都是guest,登陆即可。

整合RabbitMQ

本次教程需要创建2个springboot项目,一个 rabbitmq-provider (生产者),一个rabbitmq-consumer(消费者)。
首先创建 rabbitmq-provider
rabbitmq的依赖:

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

然后application.yml

server:
  port: 8081
spring:
  application:
    name: rabbitmq-provider
  rabbitmq:
    host: 127.0.0.1
    username: guest
    password: guest
    port: 5672

接着我们以direct exchange(直连型交换机)为例,创建DirectRabbitConfig.java(对于队列和交换机持久化以及连接使用设置)

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;
 

@Configuration
public class DirectRabbitConfig {
 
    //队列 起名:DirectQueue
    @Bean
    public Queue DirectQueue() {
        // durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
        // exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
        // autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
        //return new Queue("DirectQueue",true,true,false);
 
        //一般设置一下队列的持久化就好,其余两个就是默认false
        return new Queue("DirectQueue",true);
    }
 
    //Direct交换机 起名:DirectExchange
    @Bean
    DirectExchange DirectExchange() {
      //  return new DirectExchange("DirectExchange",true,true);
        return new DirectExchange("DirectExchange",true,false);
    }
 
    //绑定  将队列和交换机绑定, 并设置用于匹配键:DirectRouting
    @Bean
    Binding bindingDirect() {
        return BindingBuilder.bind(DirectQueue()).to(DirectExchange()).with("DirectRouting");
    }
 
    @Bean
    DirectExchange lonelyDirectExchange() {
        return new DirectExchange("lonelyDirectExchange");
    }
    
}

然后写个简单的接口进行消息推送
RabbitMQController.java

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
@RequestMapping("/mq")
public class RabbitMQController {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @GetMapping("/direct/{message}")
    public void mqController(@PathVariable("message") String message) {
        rabbitTemplate.convertAndSend("DirectExchange", "DirectRouting", message);
        System.out.println("消息已发送!");
    }
}

把rabbitmq-provider项目运行,调用下接口:

因为我们目前还没有消费者,所以消息还没被消费的,我们去rabbitMq管理页面看看,是否推送成功:

再看看队列

说明消息已经成功推送到rabbitMq服务器上面了。
接下来,创建消费者rabbitmq-consumer:
rabbitmq的依赖:

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

配置文件:application.yml

server:
  port: 8082
spring:
  application:
    name: rabbitmq-provider
  rabbitmq:
    host: 127.0.0.1
    username: guest
    password: guest
    port: 5672

DirectRabbitConfig.java(消费者单纯的使用,可以不用添加这个配置,直接建后面的监听就好,使用注解来让监听器监听对应的队列即可。配置上了的话,其实消费者也是生成者的身份,也能推送该消息。)这里不再配置。
然后是创建消息接收监听类,DirectReceiver.java:

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
@RabbitListener(queues = "DirectQueue")//监听的队列名称DirectQueue
public class DirectReceiver {
 
    @RabbitHandler
    public void receiver(String message) {
        System.out.println("DirectReceiver消费者收到消息: " + message.toString());
    }
}

然后将rabbitmq-consumer项目运行起来,可以看到之前推送的那条消息被消费了:
本案例仅演示了Direct Exchange直连型交换机,其他类型交换机若是有兴趣,可以自己动手尝试一下哈。
完整代码下载地址:https://download.csdn.net/download/cheney6666/57032853

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5654359.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存