目录
一、下载安装erlang
安装Rabbit MQ的前提是安装Erlang,原因RabbitMQ服务端代码是使用并发式语言Erlang编写。
Erlang官方下载地址:https://www.erlang.org/downloads
百度网盘:链接:https://pan.baidu.com/s/1KF1qFm1UqOU599IOr5NKnA?pwd=5wn4
提取码:5wn4
版本:otp_win64_23.3
傻瓜式安装 一直下一步,安装完成后开始配置环境变量
%ERLANG_HOME%\bin
以管理员身份打开cmd,输入erl
看到如上信息,则安装成功。
二、下载安装RabbitMQ
RabbitMQ官方 下载地址:https://www.rabbitmq.com/download.html
百度网盘:链接:https://pan.baidu.com/s/1reofB1Kt549UCcDMZ_qm1Q?pwd=n2xw
提取码:n2xw
版本:rabbitmq-server-3.8.16
傻瓜式安装 一直下一步,安装完成
找到RabbitMq安装目录,如:
C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.14\sbin
以管理员身份打开cmd
cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.14\sbin
输入rabbitmq-plugins enable rabbitmq_management
安装完后,输入 rabbitmqctl status
看到上述信息,则表示安装成功,接下来启动服务,如下图:
在浏览器地址打开:http://localhost:15672/#/
输入默认账号guest 密码guest 点击【login】,如下图:
最后RabbitMq安装成功。
三、设置rabbitMq远程IP访问权限
用原始的guest用户只能登录localhost,在外部访问不了,所以我们要添加一个用户,供外部登录使用:
1、添加一个用户,我这里以设置的用户名是ant,大家可以按需设置
rabbitmqctl add_user ant 123456
2、设置ant的角色信息,这里设置为超级管理员管理角色(可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作)
rabbitmqctl set_user_tags ant administrator
3、设置用户权限
rabbitmqctl set_permissions -p “/” ant “." ".” “.*”
设置上面3步,就可以从外部访问登录了!
四、创建虚拟主机、配置用户到主机
虚拟主机可以理解为RabbitMQ中的重大特点,实际上在之前就已经存在虚拟主了。
RāobitMQ如果没有配置,则默认会存在一个虚拟主机,当然用户也可以建立自己的虚
拟主机,并目每一个虚拟主机中有自己的队列信息。
1、创建新用户(上一步通过命令创建了用户,可以忽略次步)
2、创建虚拟主机
在正常安装RabbitMQ之后, 系统会默认创建一个虚拟主机 名称以 / 的形式
点击Virtual Hosts 添加一个名为test的虚拟主机
添加成功后点击test这里我们为虚拟主机添加用户
点击权限后, 选择User的下拉中就能看到我们的刚添加的用户heng
点击Set permission 设置权限后就能在上方权限列表中看见我们刚添加的用户
回到虚拟主机的页面后, 我们发现会多出一条记录
到这里我们为虚拟主机添加用户的工作就完成啦~
五、创建配置交换机、队列
1、创建交换机
创建交换机的时候需要指定虚拟主机以及交换机的类型(direct(路由模式)、fanout(广播)、headers、topic)
direct:Exchange通过消息携带的路由键来将消息分发到对应的队列中
fanout:Exchange将消息分发到所有绑定到交换机的队列中
headers:Exchange通过判断消息头的值是否与绑定的值相匹配来分发消息
x-match为any时,消息头的任意一个值匹配就可以满足条件
x-match为all时,消息头的所有值匹配才能满足条件
topic:Exchange将满足路由规则的消息分发到对应的队列
2、创建队列
创建队列时往往需要绑定到交换机上。
3、 绑定交换机
点击Exchanges标签
(1)输入需要绑定的交换机名称查询
(2)点击交换机名称进入详情页操作
配置完成
六、SpringBoot集成RabbitMQ
1、导入依赖
<!--RabbitMQ--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
2、配置.yml文件
#配置rabbitMq 服务器 #spring:下一级 rabbitmq: host: 121.36.131.133 port: 5672 username: admin password: admin virtual-host: pie-fpt # 关闭消费者 listener: simple: auto-startup: false #是否关闭所以定时任务 false 关闭 true 开启
3、创建消费者
package com.piefpt.module.rabbitmq.consumer; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.rabbit.annotation.*; import org.springframework.stereotype.Component; @Component @Slf4j public class VideoConsumer { //配置需要监听的队列(返回结果) @RabbitListener( bindings = @QueueBinding( value = @Queue(value = "early_video_streaming_pull_queue",durable = "true"), exchange = @Exchange(name = "early_video_streaming_pull_exchange", durable = "true", type = "classic", ignoreDeclarationExceptions = "true"),//保证出现异常不影响交换机运行 key = "early_video_streaming_pull_routing") ) @RabbitHandler public void getMsg(byte[] msg) { try { //业务处理 } catch (Exception e) { e.printStackTrace(); log.info("消息失败:" + msg); } } }
4、创建生产者
package com.piefpt.module.rabbitmq.producer; import cn.hutool.json.JSONUtil; import com.jgdf.core.web.R; import com.piefpt.module.rabbitmq.entity.VideoStreaming; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.amqp.core.MessageBuilder; import org.springframework.amqp.core.MessageProperties; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; @Slf4j @Api(tags = "算法视频流推送", value = "算法视频流推送") @RestController @RequestMapping(value = "/VideoProducer") public class VideoProducer { @Resource private RabbitTemplate rabbitTemplate; @PostMapping("/addVideoProducerMsg") @ApiOperation(value = "发送视频流算法请求") public R addStopWarning(@RequestBody VideoStreaming videoStreaming) { MessageProperties properties = new MessageProperties(); properties.setContentType(MessageProperties.CONTENT_TYPE_JSON); rabbitTemplate.convertAndSend("early_video_streaming_push_queue", MessageBuilder.withBody(JSONUtil.toJsonStr(videoStreaming) .getBytes(StandardCharsets.UTF_8)) .andProperties(properties) .build() ); return R.ok("成功"); } }
如果帮助到了你,还请点赞支持