SpringCloud学习笔记(二十)SpringBoot整合RabbitMQ

首先复习一下我们使用消息队列的原因:削峰、异步、解耦。

然后我们在本地安装一个RabbitMQ。

在安装RabbitMQ之前,我们先得安装erlang语言,因为它是RabbitMQ的开发语言。

erlang的安装包下载地址为:https://www.erlang.org/downloads  (下载比较慢的时候建议挂梯子或百度云)

erlang的安装没什么好讲的,就普通的安装程序而已,但是要注意不能有中文安装路径。

安装好之后,打开电脑环境变量配置。配置ERLANG_HOME。

然后再PATH加上erlang的bin目录。

保存之后打开CMD,输入erl ,提示版本号说明前面的操作都成功。

接下来安装RabbitMQ,下载地址:https://www.rabbitmq.com/install-windows.html  (我这是windows演示,下载慢挂梯子或者百度云)

RabbitMQ的安装也是普通安装,记得安装路径不能有中文和空格。

安装好之后开始菜单会有这几个快捷方式。

我们先执行stop ,别管原来有没有启动,先把它关闭了,然后双击start,提示启动成功。

如果start没有成功,那就stop->remove->(re)install->start的顺序再来一遍。

启动成功之后,我们到rabbit的安装目录的sbin文件夹下

按住shift,在空白处右键,选择“在此处打开PowerShell窗口”。键入

 .\rabbitmq-plugins.bat enable rabbitmq_management

然后回车,会开始安装管理插件,首次安装是提示6个,我这里因为已经安装过所以只提示了3个。

然后到浏览器访问,RabbitMQ的默认端口是16572

http://localhost:15672/

输入默认的账户名和密码,都是 guest 然后点击“Login”

进入了RabbitMQ的管理界面,前面的操作就算成功了。

接下来我们学习消息队列中间件RabbitMQ与SpringBoot的整合(与SpringCloud无关,所以只启动了eurek,网关和配置中心都忽略掉)。

我们模拟最简单的场景,生产者发送消息,多个消费者获取消息。我就不新建项目了,直接使用member作为生产者,order作为消费者。

首先在他们的父项目parent引入依赖。

        <!-- 消息队列 RabbitMQ -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

这样member和order都能直接使用amqp了。

接下来我们在member的application.yaml添加我们的rabbitmq的连接参数,(order也需要添加,但是由于我全部使用默认,所以order不加也一样)

之后在member的controler中增加一个接口用来新增消息。

使用RabbitTemplate工具类将简化我们的配置和代码。调用其converAndSend方法,指定交换机和队列之后可以直接发送消息,消息的格式为object对象。

最后在启动前加上@EnableRabbit

启动成功之后,RabbitMQ的管理页面会增加一个连接。(若启动失败,请检查jar包是否下载完整,我被这个坑了一天,一直提示RabbitTemplate未注入到Spring)

然后我们在RabbitMQ管理页面中手动添加交换机和队列(根据上面代码的来,我的交换机为test,路由为q1)

队列创建好之后点击一下它的名称,就会进入到队列详情里,在Bind里绑定交换机和路由。

绑定之后消息才能准确发送到队列中,然后调用接口发送消息。

然后我们在RabbitMQ页面就可以看到增加了一条消息,我们可以通过Get Messages查看消息,并且不会消耗掉,Ready为未消耗掉的消息。

 

然后我们准备消费者,消费者往往通过监听去获取消息,当然也可以通过RabbitTemplate的receiveAndConvert来主动消费。

消费者代码简单贴一下

package com.study.api.mq;

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



@Component
public class CousumerService {

    @RabbitListener(queues = "q1")
    @RabbitHandler
    public void onMessage(Message message){
        //	1. 收到消息以后进行业务端消费处理
        System.err.println("收到消息:" + message.getPayload());

    }

}

然后同样也要在启动类中加上@EnableRabbit

启动成功之后马上就收到刚刚的消息了。

我们换个端口再启动一个消费者

然后再发几条消息

这可以看得出来是轮询的。消费者不能设置权重但可以给它设置同时处理数量来平衡服务器。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值