Java项目集成RocketMQ

news2024/9/23 1:29:48

文章目录

    • 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:  # 作用是服务注册和发现,会自动发现broker
  producer:
    group: test-group

CleanShot 2024-07-12 at 13.16.40@2x

5.SubjectController.java
1.依赖注入 RocketMQTemplate
    @Resource
    private 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
     */
    @Override
    public 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
    @Override
    public 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.coloradmin.cn/o/2055296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PLC常用知识框架V1.0

在工控领域&#xff0c;PLC程序作为软件控制核心&#xff0c;地位很重要&#xff0c;但阅读理解程序&#xff0c;也是一个困难的事。 常在网上看到互联网行业的程序员吐槽祖传代码&#xff0c;其实PLC程序也差不多&#xff0c;由于PLC程序受时间&#xff0c;客户需求&#xff…

高云代理商| 一文看懂FPGA芯片选型!

一、FPGA简介&#xff1a; FPGA诞生于1984年&#xff0c;是一种特殊的逻辑芯片&#xff0c;属于半定制化、可编程芯片。它允许用户可以随时定义芯片的硬件功能。通过开放芯片内部的逻辑块、连线、I/O 等资源给用户配置&#xff0c;使得同一片 FPGA 既可以在 5G 的基站实现信道…

监控电脑屏幕的软件叫什么?6款超值的电脑屏幕监控软件推荐!

数字化转型的大背景下&#xff0c;企业对于员工的工作效率和行为规范提出了更高的要求。 为了确保员工的工作效率以及保护公司的数据安全&#xff0c;电脑屏幕监控软件逐渐成为企业管理的重要工具之一。 本文将为大家介绍五款超值的电脑屏幕监控软件&#xff0c;帮助企业更好地…

Linux 离线安装docker和docker-compose

前言 公司有 docker 和 docker-compose 离线包安装部署的需求&#xff0c;本文应运而生撰写时间&#xff1a;2024-06-07&#xff08;初稿&#xff09; 1 应用版本 docker&#xff1a;20.10.7, build f0df350docker-compose&#xff1a;1.25.1 2 物料准备 服务器账号/密码d…

即插即用,效率远超ControlNet!贾佳亚团队重磅开源ControlNeXt:超强图像视频生成方法

文章链接&#xff1a;https://arxiv.org/pdf/2408.06070 git链接&#xff1a;https://github.com/dvlab-research/ControlNeXt 项目链接&#xff1a;https://pbihao.github.io/projects/controlnext/index.html 亮点直击 提出了ControlNeXt&#xff0c;这是一种强大且高效的图像…

Spring Boot实现定时任务

目录 1.什么是定时任务2.Timer的使用3.Spring Task的使用Api说明配置类启用定时任务支持配置定时任务多线程&#xff08;异步&#xff09;定时任务 1.什么是定时任务 定时任务是指在预定的时间点或按照特定的时间间隔自动执行的任务。 定时任务的应用场景&#xff1a; 操作系…

系统调用学习29

#include<iostream> #include<signal.h> #include<unistd.h> #include<vector> // 定义信号屏蔽常量 #define BLOCK_SIGNAL 2 #define MAX_SIGNUM 31// 定义需要屏蔽的信号数组 int sigarr[]{2,3,4}; // 展示当前线程未处理的信号状态 static void sho…

TortoiseGit修改差异查看器为BeyondCompare

1. TortoiseGit修改差异查看器 比较文件&#xff1a;”C:\Program Files\Beyond Compare 4\BComp.exe” %base %mine /title1%bname /title2%yname /leftreadonly差异文件&#xff1a;”C:\Program Files\Beyond Compare 4\BCompare.exe2. TortoiseGit修改合并工具 解决冲突&…

【嵌入式开发之网络编程】TCP端口和UDP端口

目录 网络端口的定义及作用 运输层的作用 运输层的两个主要协议 用户数据报协议UDP (User Datagram Protocol) 传输控制协议TCP (Transmission Control Protocol) 运输层的端口及分类 按照端口号分类 按照协议类型分类 BSD端口 网络端口的定义及作用 在网络技术中…

低代码平台的优势与挑战:现代开发的革新之路

在数字化转型的浪潮中&#xff0c;低代码平台&#xff08;Low-Code Platforms&#xff09;成为了开发者和企业的重要工具。低代码平台通过可视化界面和拖拽式功能&#xff0c;简化了应用程序的开发过程&#xff0c;使得即使是没有编程背景的用户也能够构建功能丰富的应用。然而…

ubuntu18.04下安装nvidia3090显卡驱动

前言&#xff1a;之前安装过4090的显卡&#xff0c;但是是使用20.04直接在第三方驱动里面安装的&#xff0c;这回使用的是18.04&#xff0c;版本估计是21年以前的&#xff0c;附加驱动直接没有&#xff0c;整整卡了两天&#xff0c;最后再查询多篇资料后最终安装好&#xff0c;…

软考-软件设计师 (计算机网络习题)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Impala 与 Hive 的比较

Impala 与 Hive 的关系 impala是基于hive的大数据分析查询引擎&#xff0c;直接使用hive的元数据库metadata&#xff0c;意味着impala元数据都存储在hive的metastore当中&#xff0c;并且impala兼容hive的绝大多数sql语法。所以需要安装impala的话&#xff0c;必须先安装hive&…

​高德离线API如何加载高清卫星影像

我们有客户遇到这样一个问题&#xff0c;现有平台基于高德API开发&#xff0c;但希望将地图更新为高清卫星影像。 我估计你可能也会遇到这个问题&#xff0c;因此特撰此文与大家分享。 项目背景 高德API有着比较广泛的用户群体&#xff0c;有不少系统为了业务数据的呈现&…

大数据应用整理

1.架构划分 1.1.数据抽取转换加载层&#xff08;ETL&#xff09; 从源系统抽取、转换、加载到所需的源数据&#xff0c;存储到系统的数据仓库中。ETL的设计和实施占整体工作的50%以上。ETL层的主要职责是将原始数据源中的数据提取出来&#xff0c;经过清洗、转换等处理后&…

小白学AI,新手也能轻松掌握的LLM Agent工作原理基础知识全览!

摘要 本文深入解释了大型语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;代理&#xff08;Agent&#xff09;的工作原理&#xff0c;详细阐述了它们的结构、能力和应用。 摘要 LLM代理是一种先进的数字助手&#xff0c;它们超越了传统的聊天机器人&am…

Postman数据驱动之CSV文件和JSON文件的处理

数据驱动 数据驱动&#xff1a;通过在测试过程中使用不同的输入数据来执行相同的测试脚本或流程。 适用场景&#xff1a;当一个接口需要测试多个场景用例&#xff08;正例、反例&#xff09;&#xff0c;可以使用数据驱动的形式实现。 CSV文件 CSV&#xff08;Comma-Separ…

verilog实现STFT

短时傅里叶变换&#xff08;STFT, Short Time Fourier Transform&#xff09;&#xff0c;是处理采样数据、获取信号时频特征的一种常用方法。然而其消耗的计算资源较为庞大&#xff0c;在数据采集设备全速运行时&#xff0c;若在上位机进行 STFT 的计算&#xff0c;则很难做到…

vue2使用天地图

需求&#xff1a;用vue2使用天地图展示对应点位数据以及开发中出现的问题等&#xff0c;其实天地图的写法和百度地图差不多 注意&#xff01;&#xff01;&#xff01;天地图的接口不稳定&#xff0c;时常报错418&#xff0c;官网也是一样的情况&#xff0c;推荐还是使用百度或…

一种基于物联网(IoT)的生物多样性监测系统

目录 摘要 第一部分&#xff1a;引言 第二部分&#xff1a;相关工作 第三部分&#xff1a;贡献 第四部分&#xff1a;提出的系统架构 第五部分&#xff1a;BN使用的消息框架 第六部分&#xff1a;系统实施 第七部分&#xff1a;实验场景和结果 第八部分&#xff1a;结…