Java项目集成RocketMQ

server/2024/9/29 5:35:12/

文章目录

    • 1.调整MQ的配置
        • 1.进入bin目录
        • 2.关闭broker和namesrv
        • 3.查看进程确认关闭
        • 4.编辑配置文件broker.conf,配置brokerIP1
        • 5.开放端口10911
        • 6.重新启动
          • 1.进入bin目录
          • 2.启动mqnamesrv和mqbroker
            • 1.启动 NameServer 并将输出重定向到 mqnamesrv.log
            • 2.**启动 Broker 并将输出重定向到** **mqbroker.log**
            • 3.**实时监控 NameServer 的日志文件**
            • 4.**实时监控 Broker 的日志文件**
            • 5.查看进程
    • 2.项目集成MQ
        • 1.domain引入mq依赖
        • 2.sun-club-application-mq 引入domain依赖,用于消费mq
        • 3.sun-club-starter 引入mq层
        • 4.application.yml 配置mq
        • 5.SubjectController.java
          • 1.依赖注入 RocketMQTemplate
          • 2.编写controller,作为消息生产者
        • 6.TestConsumer.java 测试消费
        • 5.测试
    • 3.点赞业务优化为MQ处理
        • 1.SubjectLikedMessage.java 点赞消息实体
        • 2.sun-club-domain 同步点赞数据
          • 1.SubjectLikedDomainService.java
          • 2.SubjectLikedDomainServiceImpl.java
          • 3.add方法逻辑修改
          • 4.测试

1.调整MQ的配置

1.进入bin目录
cd /usr/local/soft/rocketmq-all-4.8.0-bin-release/bin
2.关闭broker和namesrv
sh mqshutdown broker && sh mqshutdown namesrv

CleanShot 2024-07-12 at 12.20.25@2x

3.查看进程确认关闭
ps -ef | grep NamesrvStartup && ps -ef | grep BrokerStartup

CleanShot 2024-07-12 at 12.21.38@2x

4.编辑配置文件broker.conf,配置brokerIP1
vim /usr/local/soft/rocketmq-all-4.8.0-bin-release/conf/broker.conf
# NameServer 地址(开端口)
namesrvAddr=# brokerIP1 指定了 Broker 对外提供服务的 IP 地址
brokerIP1=# listenPort 指定了 Broker 监听客户端连接的端口(开端口)
listenPort=10911# 当这个选项设置为 true 时,如果客户端尝试向一个不存在的主题发送消息,Broker 会自动创建这个主题
autoCreateTopicEnable=true
5.开放端口10911
systemctl start firewalld && firewall-cmd --permanent --add-port=10911/tcp && firewall-cmd --reload && firewall-cmd --query-port=10911/tcp

CleanShot 2024-07-12 at 12.52.09@2x

6.重新启动
1.进入bin目录
cd /usr/local/soft/rocketmq-all-4.8.0-bin-release/bin
2.启动mqnamesrv和mqbroker
1.启动 NameServer 并将输出重定向到 mqnamesrv.log
nohup sh mqnamesrv > mqnamesrv.log 2>&1 &
2.启动 Broker 并将输出重定向到 mqbroker.log
nohup sh mqbroker -c ../conf/broker.conf > mqbroker.log 2>&1 &
3.实时监控 NameServer 的日志文件
tail -f mqnamesrv.log &

CleanShot 2024-07-12 at 12.40.03@2x

4.实时监控 Broker 的日志文件
tail -f mqbroker.log &
5.查看进程
ps -ef | grep NamesrvStartup && ps -ef | grep BrokerStartup

CleanShot 2024-07-12 at 12.57.04@2x

2.项目集成MQ

1.domain引入mq依赖
        <!-- rocketmq --><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.1.1</version></dependency>

CleanShot 2024-07-12 at 13.05.02@2x

2.sun-club-application-mq 引入domain依赖,用于消费mq
        <!-- 引入domain层 --><dependency><groupId>com.sun.club</groupId><artifactId>sun-club-domain</artifactId><version>1.0-SNAPSHOT</version></dependency>

CleanShot 2024-07-12 at 13.07.58@2x

3.sun-club-starter 引入mq层
        <!-- 引入mq层 --><dependency><groupId>com.sun.club</groupId><artifactId>sun-club-application-mq</artifactId><version>1.0-SNAPSHOT</version></dependency>

CleanShot 2024-07-12 at 13.11.35@2x

4.application.yml 配置mq
# mq配置
rocketmq:name-server:  # 作用是服务注册和发现,会自动发现brokerproducer:group: test-group

CleanShot 2024-07-12 at 13.16.40@2x

5.SubjectController.java
RocketMQTemplate_160">1.依赖注入 RocketMQTemplate
    @Resourceprivate RocketMQTemplate rocketMQTemplate;
2.编写controller,作为消息生产者
    /*** 测试mq发送* @return*/@GetMapping("/pushMessage")public Result<Boolean> pushMessage(@Param("id") int id) {rocketMQTemplate.convertAndSend("first-topic", "hello " + id);return Result.ok();}

CleanShot 2024-07-12 at 13.34.21@2x

6.TestConsumer.java 测试消费
package com.sunxiansheng.subject.application.mq;import com.sun.media.jfxmedia.logging.Logger;
import groovy.util.logging.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;/*** Description:* @Author sun* @Create 2024/7/12 13:24* @Version 1.0*/
@Component
// topic:主题,就是生产者那里指定的主题
// consumerGroup:消费组,在application.yml文件中配置的
// RocketMQListener<String>:这里的泛型就是消息的类型
@RocketMQMessageListener(topic = "first-topic", consumerGroup = "test-group")
@Slf4j
public class TestConsumer implements RocketMQListener<String> {private static final org.slf4j.Logger log = LoggerFactory.getLogger(TestConsumer.class);/*** 对消息进行消费* @param s*/@Overridepublic void onMessage(String s) {log.info("接受到消息了:{}", s);}}

CleanShot 2024-07-12 at 13.34.57@2x

5.测试

CleanShot 2024-07-12 at 13.35.13@2x

CleanShot 2024-07-12 at 13.35.21@2x

3.点赞业务优化为MQ处理

1.SubjectLikedMessage.java 点赞消息实体
package com.sunxiansheng.subject.domain.entity;import lombok.Data;
import lombok.experimental.Accessors;import java.io.Serializable;/*** 题目点赞消息*/
@Data
@Accessors(chain = true) // 支持链式调用
public class SubjectLikedMessage implements Serializable {/*** 题目id*/private Long subjectId;/*** 点赞人id*/private String likeUserId;/*** 点赞状态 1点赞 0不点赞*/private Integer status;}
2.sun-club-domain 同步点赞数据
1.SubjectLikedDomainService.java
    /*** MQ同步点赞数据* @param subjectLikedBO*/void syncLikedByMsg(SubjectLikedBO subjectLikedBO);
2.SubjectLikedDomainServiceImpl.java
    @Overridepublic void syncLikedByMsg(SubjectLikedBO subjectLikedBO) {SubjectLiked subjectLiked = new SubjectLiked();subjectLiked.setSubjectId(subjectLikedBO.getSubjectId());subjectLiked.setLikeUserId(subjectLikedBO.getLikeUserId());subjectLiked.setStatus(subjectLikedBO.getStatus());subjectLiked.setIsDeleted(IsDeleteFlagEnum.UN_DELETED.getCode());subjectLikedService.insert(subjectLiked);}
3.add方法逻辑修改

CleanShot 2024-07-12 at 14.33.20@2x

4.测试

CleanShot 2024-07-12 at 14.37.16@2x

CleanShot 2024-07-12 at 14.37.25@2x


http://www.ppmy.cn/server/103033.html

相关文章

理解和控制 OBS 媒体源 - 前提条件与操作

在使用 Open Broadcaster Software (OBS) 开发过程中,对媒体源进行有效控制是实现高质量直播和录制的关键。媒体控制功能,如播放、暂停和重启,都依赖于 OBS 的核心机制。本文通过深入分析 obs_source_media_restart 函数的实现细节,揭示了确保这些控制功能正常工作的前提条…

力扣第 411 场周赛题解

3258. 统计满足 K 约束的子字符串数量 I 给你一个 二进制 字符串 s 和一个整数 k。 如果一个 二进制字符串 满足以下任一条件&#xff0c;则认为该字符串满足 k 约束&#xff1a; 字符串中 0 的数量最多为 k。字符串中 1 的数量最多为 k。 返回一个整数&#xff0c;表示 s …

探秘:哪些项目需要代理IP来助力?

网络爬虫&#xff1a;数据采集的秘密武器 网络爬虫是互联网世界中的“数据矿工”&#xff0c;它们在网络中不断爬行&#xff0c;采集各种有用的信息。然而&#xff0c;频繁的访问请求很容易引起目标网站的警觉&#xff0c;甚至被封禁。此时&#xff0c;代理IP就像是爬虫的“隐…

【系统架构设计】计算机网络

【系统架构设计】计算机网络 网络架构与协议网络互联模型OSI/RM 结构模型TCP/IP结构模型IPv6 局域网与广域网局域网特点 网络互连与常用设备网络互联设备交换技术路由技术 网络存储技术 网络架构与协议 网络互联模型 OSI/RM 结构模型 1977年&#xff0c;国际标准化组织为适应…

如何做萤石开放平台的物联网卡定向?

除了用萤石自带的4G卡外&#xff0c;我们也可以自己去电信、移动和联通办物联网卡连接萤石云平台。 1、说在前面 注意&#xff1a;以下流程必须全部走完&#xff0c;卡放在设备上才能连接到萤石云平台。 2、大致流程 登录官网→下载协议→盖章&#xff08;包括骑缝章&#…

Java面向对象编程简介

面向对象编程&#xff08;OOP&#xff09;的三大特性是封装、继承和多态。它们是构建灵活、可扩展和可维护的对象系统的基石。以下是对这些特性及其相关概念的详细解释&#xff0c;包括它们的定义、特性、使用场景&#xff0c;以及静态多分派、动态单分派、重载、继承、抽象、多…

《AI视频类工具之五——​ 开拍》

一.简介 官网:开拍 - 用AI制作口播视频用AI制作口播视频https://www.kaipai.com/home?ref=ai-bot.cn 开拍是一款由美图公司在2023年推出,利用AI技术制作的短视频分享应用。这款工具通过AI赋能,为用户提供了从文案创作、视频拍摄到视频剪辑、包装的一站式解决方案,极大地…

设计模式---构建者模式(Builder Pattern)

构建者模式&#xff08;Builder Pattern&#xff09; 是一种创建型设计模式&#xff0c;旨在将复杂对象的构建过程与其表示分离。它允许使用相同的构建过程创建不同的表示。该模式通常用于构建复杂对象&#xff0c;这些对象由多个部分组成或具有多个可选属性。 构建者模式的核…