小程序验证点击收藏

发布时间:2025-06-24 18:13:55  作者:北方职教升学中心  阅读量:238


创建虚拟主机

五、拉取RabbitMQ镜像

4、编写接收方接收消息

/** * 接收消息 */@Component@RequiredArgsConstructorpublic class StoreListener {    private final IStoreService storeService;    @RabbitListener(bindings = @QueueBinding(            value = @Queue(name = "store.addFavorite.success.queue", durable = "true"), // 队列 起名规则(服务名+业务名+成功+队列),durable持久化            exchange = @Exchange(name = "addFavorite.direct"), // 交换机名称,交换机默认类型就行direct,所以不用配置direct            key = "addFavorite.success" // 绑定的key    ))    public void listenAddFavoriteCountsSuccess(Long storeId){        storeService.updateStoreFavoriteUsersCountAdd1(storeId);    }}

虽然代码里面也已经解释了,但是下面也再解释一下:

value:是队列信息。关于图形化界面可能出现的问题

Stats in management UI are disabled on this node

可以参考这篇博客:

RabbitMQ客户端界面问题 Stats in management UI are disabled on this node-CSDN博客

五、docker中安装rabbitmq

1、

在其他教程到这一步已经可以了,可以参考下面两篇博客:

宝塔面板安装RabbitMQ(已解决)_宝塔安装rabbitmq-CSDN博客

宝塔安装rabbitMQ实战-CSDN博客

四、RabbitMQ安装

二、创建虚拟主机

创建一个单独的虚拟主机来进行隔离,这里可以参考前面在虚拟机上的操作。启动RabbitMQ

三、

目录

一、

再次去:https://www.erlang-solutions.com/downloads/#

我是centos7,所以下载该版本。

3、后来猜到应该是客户端服务可能是没开启,在之前宝塔软件里面好像有看过这个东西。部署项目验证

六、

去查看mq客户端:

成功更新,说明使用RabbitMQ实现异步通讯成功。安装RabbitMQ

在软件商店中安装RabbitMQ

出现问题:

看到报错日志,我又去下载报错日志里面的版本。开放客户端服务

在mq容器中打开终端

列出所有可用的插件:

rabbitmq-plugins list

找到rabbitmq_management:

开启rabbitmq_management:

rabbitmq-plugins enable rabbitmq_management

然后再访问客户端,成功访问:

7、小程序验证

三、

六、RabbitMQ安装

由于在测试环境中,我们现在虚拟机上基于docker安装mq

docker run \ -e RABBITMQ_DEFAULT_USER=quick \ -e RABBITMQ_DEFAULT_PASS=123 \ -v mq-plugins:/plugins \ --name mq \ --hostname mq \ -p 15672:15672 \ -p 5672:5672 \ --network your-net\ -d \ rabbitmq:3.8-management

在docker环境上运行改指令

前两个是登录的用户名密码

network是连接的网络,如果用默认网络的话就不需要写

最后一个是版本,这个是目前测试的版本

二、

在RabbitMQ的界面中队列也有一条消息出现,说明mq实现异步通讯成功。编写发送方发送消息

6、

6、编写发送方发送消息

@Transactional    @Override    public void add(Long storeId) {        Favorite favorite = Favorite.builder()                .storeId(storeId)                .userId(BaseContext.getCurrentId()).build();        Favorite one = Db.getOne(favorite);        if (one!=null){            throw new FavoriteException(MessageConstant.COLLECTION_BE_REPEAT);        }        // 更新收藏表        favoriteMapper.insert(favorite);        // 更新商品表,收藏数+1        //storeService.updateStoreFavoriteUsersCountAdd1(storeId);        // 发送消息 (交换机+绑定的key和发送的消息)        try {            rabbitTemplate.convertAndSend("addFavorite.direct","addFavorite.success",storeId);        } catch (Exception e) {            log.error("发送添加收藏消息失败,店铺id:{}",storeService,e);}    }

虽然代码里面也已经解释了,但是下面也再解释一下:

"addFavorite.direct":是交换机名称,和接收方一致
"addFavorite.success":是绑定的key,和接收方一致
storeId:是发送的信息

6、前往宝塔面板

进入tmp目录,将之前的rpm包放进去。

收藏成功,去看一下数据库,查看是否更新。

安装之前注意版本兼容问题:Erlang Version Requirements | RabbitMQ

安装erlang地址:https://www.erlang-solutions.com/downloads/#

(1)查看rabbitmq的版本

先去宝塔查看rabbitmq的版本:

(2)查找erlang兼容版本

然后去找到版本兼容的erlang版本:Erlang Version Requirements | RabbitMQ

(3)安装RPM包

去下载:https://www.erlang-solutions.com/downloads/#

 

下载后拿到rpm文件:

注意:这里没有下载的版本,下载需要与自己的版本一致,如果发现启动不了RabbitMQ,请看后面的启动RabbitMQ。

参考博客:Docker RabbitMQ安装_all stable feature flags must be enabled after com-CSDN博客

8、配置docker镜像加速

3、登录RabbitMQ客户端

8、引入依赖

2、起名规则(服务名+业务名+成功+队列),durable表示持久化

exchange:是交换机名称。开放客户端服务

7、查看镜像和容器

docker imagesdocker ps

到这里已经是成功在docker中装好mq容器了

但是在我访问http://主机ip:15672的时候却无法访问,即使我开放了服务器的安全组。部署项目验证

参考我之前的博客:记录部署项目《庆自提》完整流程-CSDN博客

修改yml配置文件,修改下面的消息:

rabbitmq:    host: ${quick.rabbitmq.host}    port: ${quick.rabbitmq.port} # 端口    virtual-host: ${quick.rabbitmq.virtual-host} # 虚拟主机    username: ${quick.rabbitmq.username} # 用户名    password: ${quick.rabbitmq.password} # 密码

在已经上线的小程序测试~~

目前只有一个人收藏,现在去测试一下。宝塔中安装RabbitMQ

1、查看镜像和容器

6、登录RabbitMQ客户端

这里显示有些特性标志未开启,我们可以去开启那些标志。拓展使用

关于一些拓展使用可以参考以下这些博客:

RabbitMQ实现多线程处理接收消息-CSDN博客

在配置mq过程中遇到许许多多的bug和问题,改了很久很久,如果里面有哪些不足的欢迎指正和建议!!!

运行RabbitMQ
docker run \ -e RABBITMQ_DEFAULT_USER=quick \ -e RABBITMQ_DEFAULT_PASS=quick \ -v mq-plugins:/plugins \ --name mq \ --hostname mq \ -p 15672:15672 \ -p 5672:5672 \ -d \ rabbitmq

5、配置docker镜像加速
# 创建目录mkdir -p /etc/docker# 复制内容,注意把其中的镜像加速地址改成你自己的tee /etc/docker/daemon.json <<-'EOF'{    "registry-mirrors": [        "http://hub-mirror.c.163.com",        "https://mirrors.tuna.tsinghua.edu.cn",        "http://mirrors.sohu.com",        "https://ustc-edu-cn.mirror.aliyuncs.com",        "https://ccr.ccs.tencentyun.com",        "https://docker.m.daocloud.io",        "https://docker.awsl9527.cn"    ]}EOF# 重新加载配置systemctl daemon-reload# 重启Dockersystemctl restart docker
3、那边有点不人性化,我尝试了几次才下载到自己的版本。起名规则是(业务名+direct),和发送方一致
key:绑定的key。小程序验证

点击收藏。

该案例是收藏商品后完成收藏表插入语句后,还要去商品表更新商品表,更新该商品的被收藏数加一,但是如果同步通讯的话,响应会有延迟,可能会对性能造成一定影响,但是通过异步通讯,不需要实时响应,就会对性能有一定的优化。

注意!注意!注意!

2、前往宝塔面板

3、配置yml

3、

三、运行RabbitMQ

5、

卸载rabbitmq,然后再重新安装一次。

还是出现报错:

出现了这个报错,很莫名其妙,然后我就去用docker安装,有解决办法的可以评论一下。启动RabbitMQ

由于目前是测试阶段,这里我使用之前学习的时候的版本。安装docker

2、

创建新用户后重新登陆,然后创建一个单独的 Virtual Hosts (虚拟主机)来进行隔离。引入依赖

<!--rabbitmq-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-amqp</artifactId>        </dependency>
2、配置yml
spring:  rabbitmq:    host: ${quick.rabbitmq.host}    port: ${quick.rabbitmq.port} # 端口    virtual-host: ${quick.rabbitmq.virtual-host} # 虚拟主机    username: ${quick.rabbitmq.username} # 用户名    password: ${quick.rabbitmq.password} # 密码
quick:  rabbitmq:    host: 192.168.75.101 #服务器ip地址(此处为虚拟机地址)    port: 5672 # 端口    virtual-host: /xxx # 虚拟主机    username: xxx # 用户名    password: xxx # 密码    listener:      simple:        acknowledge-mode: auto # 自动ack        retry:          enabled: true # 开启消费者失败重试          initial-interval: 1000ms # 初识的失败等待时长为1秒          multiplier: 1 # 失败的等待时长倍数,下次等待时长 = multiplier * last-interval          max-attempts: 3 # 最大重试次数          stateless: false # true无状态;false有状态。配置消息转换器
/** * 配置消息转换器 */@Configuration@ConditionalOnClass(RabbitTemplate.class) //有RabbitTemplate依赖才会生效,否则不生效public class MqConfig {    @Bean    public MessageConverter messageConverter(){        //使用json序列化发送消息        return new Jackson2JsonMessageConverter();    }}
4、编写Java代码
1、

9、

将之前的哪个rmp文件删掉,再将刚刚下载的rpm文件重命名再次放入tmp目录中

上面我重命名错了,只记得修改后面,下面是再次修改后的结果。如果业务中包含事务,这里改为false publisher-confirm-type: CORRELATED # 交换机的确认 publisher-returns: true # 队列的确认

3、下载erlang

(1)查看rabbitmq的版本

(2)查找erlang兼容版本

(3)安装RPM包

2、

三、docker中安装rabbitmq

1、下载erlang

RabbitMQ服务端是由并发式语言Erlang编写的,所以安装RabbitMQ的之前需要安装Erlang,保证所需要的环境。编写Java代码\

1、配置消息转换器

4、编写接收方接收消息

5、安装docker

2、安装RabbitMQ

四、拓展使用


一、拉取RabbitMQ镜像

docker pull rabbitmq

4、宝塔中安装RabbitMQ

1、起名规则是(业务名+success),表示成功的key,和发送方一致

起名规则是个人而定

5、