Java项目集成RocketMQ

文章目录

1.调整MQ的配置

1.进入bin目录
sh 复制代码
cd /usr/local/soft/rocketmq-all-4.8.0-bin-release/bin
2.关闭broker和namesrv
sh 复制代码
sh mqshutdown broker && sh mqshutdown namesrv
3.查看进程确认关闭
复制代码
ps -ef | grep NamesrvStartup && ps -ef | grep BrokerStartup
4.编辑配置文件broker.conf,配置brokerIP1
sh 复制代码
vim /usr/local/soft/rocketmq-all-4.8.0-bin-release/conf/broker.conf
sh 复制代码
# NameServer 地址(开端口)
namesrvAddr=

# brokerIP1 指定了 Broker 对外提供服务的 IP 地址
brokerIP1=

# listenPort 指定了 Broker 监听客户端连接的端口(开端口)
listenPort=10911

# 当这个选项设置为 true 时,如果客户端尝试向一个不存在的主题发送消息,Broker 会自动创建这个主题
autoCreateTopicEnable=true
5.开放端口10911
sh 复制代码
systemctl start firewalld && firewall-cmd --permanent --add-port=10911/tcp && firewall-cmd --reload && firewall-cmd --query-port=10911/tcp
6.重新启动
1.进入bin目录
sh 复制代码
cd /usr/local/soft/rocketmq-all-4.8.0-bin-release/bin
2.启动mqnamesrv和mqbroker
1.启动 NameServer 并将输出重定向到 mqnamesrv.log
sh 复制代码
nohup sh mqnamesrv > mqnamesrv.log 2>&1 &
2.启动 Broker 并将输出重定向到 mqbroker.log
sh 复制代码
nohup sh mqbroker -c ../conf/broker.conf > mqbroker.log 2>&1 &
3.实时监控 NameServer 的日志文件
sh 复制代码
tail -f mqnamesrv.log &
4.实时监控 Broker 的日志文件
sh 复制代码
tail -f mqbroker.log &
5.查看进程
sh 复制代码
ps -ef | grep NamesrvStartup && ps -ef | grep BrokerStartup

2.项目集成MQ

1.domain引入mq依赖
xml 复制代码
        <!-- rocketmq -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
2.sun-club-application-mq 引入domain依赖,用于消费mq
xml 复制代码
        <!-- 引入domain层 -->
        <dependency>
            <groupId>com.sun.club</groupId>
            <artifactId>sun-club-domain</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
3.sun-club-starter 引入mq层
xml 复制代码
        <!-- 引入mq层 -->
        <dependency>
            <groupId>com.sun.club</groupId>
            <artifactId>sun-club-application-mq</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
4.application.yml 配置mq
yaml 复制代码
# mq配置
rocketmq:
  name-server:  # 作用是服务注册和发现,会自动发现broker
  producer:
    group: test-group
5.SubjectController.java
1.依赖注入 RocketMQTemplate
java 复制代码
    @Resource
    private RocketMQTemplate rocketMQTemplate;
2.编写controller,作为消息生产者
java 复制代码
    /**
     * 测试mq发送
     * @return
     */
    @GetMapping("/pushMessage")
    public Result<Boolean> pushMessage(@Param("id") int id) {
        rocketMQTemplate.convertAndSend("first-topic", "hello " + id);
        return Result.ok();
    }
6.TestConsumer.java 测试消费
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);
    }

}
5.测试

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

1.SubjectLikedMessage.java 点赞消息实体
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
java 复制代码
    /**
     * MQ同步点赞数据
     * @param subjectLikedBO
     */
    void syncLikedByMsg(SubjectLikedBO subjectLikedBO);
2.SubjectLikedDomainServiceImpl.java
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方法逻辑修改
4.测试
相关推荐
jiayong236 小时前
RocketMQ实战
rocketmq
huisheng_qaq2 天前
【RocketMq源码篇-03】dashboard安装搭建和启动详解(集群版)
rocketmq·rocketmq集群·rocketmq源码·dashboard可视化界面·mq中间件
雨中飘荡的记忆2 天前
布式事务详解:从理论到实践(RocketMQ + Seata)
java·rocketmq
galaxyffang7 天前
RocketMQ 为什么性能不如 Kafka?
分布式·kafka·rocketmq
一叶飘零_sweeeet7 天前
从 Kafka 到 RocketMQ:迁移实战全攻略
分布式·kafka·rocketmq
一叶飘零_sweeeet10 天前
Spring Cloud Alibaba RocketMQ 实战:从底层原理到微服务落地全攻略
微服务·架构·rocketmq
一叶飘零_sweeeet11 天前
RocketMQ 核心解密:NameServer 路由发现与负载均衡的底层逻辑全解析
负载均衡·rocketmq
无心水11 天前
【分布式利器:事务】5、本地消息表vs事务消息:异步方案怎么选?
分布式·rocketmq·分布式事务·saga·事务消息·分布式利器·2pc3pc
huisheng_qaq12 天前
【RocketMq源码篇-02】rocketmq集群搭建详细过程(docker版-2主2从)
docker·rocketmq·rocketmq集群·rocketmq源码·2主2从
无心水12 天前
【分布式利器:RocketMQ】RocketMQ基本原理详解:架构、流程与核心特性(附实战场景)
中间件·架构·rocketmq·topic·rocketmq基本原理·电商金融mq·nameserver