当前位置: 首页 > news >正文

将RocketMQ集成到了Spring Boot项目中,实现站内信功能

1. 添加依赖

首先,在pom.xml中添加RocketMQ的依赖:

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Starter Data JPA --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- H2 Database (或你选择的其他数据库) --><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><!-- Redis Cache --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- RocketMQ --><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.1</version></dependency>
</dependencies>

2. 配置文件

application.properties中配置RocketMQ的相关信息:

# Redis Configuration
spring.redis.host=localhost
spring.redis.port=6379# RocketMQ Configuration
rocketmq.name-server=localhost:9876
rocketmq.producer.group=my-producer-group

3. 数据模型

定义Message实体类:

package com.example.inbox.model;import javax.persistence.*;
import java.time.LocalDateTime;@Entity
public class Message {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private String senderId;private String receiverId;private String subject;private String body;private LocalDateTime timestamp;private boolean read;// Getters and Setters
}

4. Repository接口

创建MessageRepository接口:

package com.example.inbox.repository;import com.example.inbox.model.Message;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface MessageRepository extends JpaRepository<Message, Long> {
}

5. Service层

在Service层中集成缓存和RocketMQ的消息发送与接收:

package com.example.inbox.service;import com.example.inbox.model.Message;
import com.example.inbox.repository.MessageRepository;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class MessageService {@Autowiredprivate MessageRepository messageRepository;@Autowiredprivate RocketMQTemplate rocketMQTemplate;@Cacheable(value = "messages", key = "#receiverId")public List<Message> getMessagesByReceiver(String receiverId) {return messageRepository.findByReceiverId(receiverId);}@CacheEvict(value = "messages", key = "#message.receiverId")public void sendMessage(Message message) {rocketMQTemplate.convertAndSend("messageTopic", message);}
}

6. 消息监听器

创建一个监听器来处理来自RocketMQ的消息:

package com.example.inbox.listener;import com.alibaba.fastjson.JSON;
import com.example.inbox.model.Message;
import com.example.inbox.service.MessageService;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
@RocketMQMessageListener(topic = "messageTopic", consumerGroup = "my-consumer-group")
public class MessageListener implements RocketMQListener<String> {@Autowiredprivate MessageService messageService;@Overridepublic void onMessage(String messageJson) {Message message = JSON.parseObject(messageJson, Message.class);message.setTimestamp(java.time.LocalDateTime.now());messageService.saveMessage(message);}
}

7. Controller

创建Controller来处理HTTP请求:

package com.example.inbox.controller;import com.example.inbox.model.Message;
import com.example.inbox.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.List;@RestController
@RequestMapping("/messages")
public class MessageController {@Autowiredprivate MessageService messageService;@GetMapping("/{receiverId}")public List<Message> getMessages(@PathVariable String receiverId) {return messageService.getMessagesByReceiver(receiverId);}@PostMappingpublic void sendMessage(@RequestBody Message message) {messageService.sendMessage(message);}
}

8. 启动类

确保你的Spring Boot应用启动类包含必要的注解:

package com.example.inbox;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication
@EnableCaching
public class InboxApplication {public static void main(String[] args) {SpringApplication.run(InboxApplication.class, args);}
}

总结

通过以上步骤,我们成功地将RocketMQ集成到了Spring Boot项目中,实现了站内信系统的异步处理。主要步骤包括:

  1. 添加RocketMQ依赖:在pom.xml中添加RocketMQ相关的依赖。
  2. 配置RocketMQ:在application.properties中配置RocketMQ的相关参数。
  3. 数据模型和Repository:定义实体类和Repository接口。
  4. Service层:在Service层中集成RocketMQ的消息发送和Redis缓存。
  5. 消息监听器:使用@RocketMQMessageListener注解创建消息监听器,处理接收到的消息。
  6. Controller:创建RESTful API来处理HTTP请求。

相关文章:

将RocketMQ集成到了Spring Boot项目中,实现站内信功能

1. 添加依赖 首先&#xff0c;在pom.xml中添加RocketMQ的依赖&#xff1a; <dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifac…...

Deepseek 怼CHATGPT实况

提示词&#xff1a; 用犀利的语言批评ChatGPT 深度思考&#xff08;R1) 嗯&#xff0c;用户让我用犀利的语言批评ChatGPT。首先&#xff0c;我需要理解他们的动机。可能他们遇到了ChatGPT的某些问题&#xff0c;比如回答不准确或者缺乏深度&#xff0c;所以想表达不满。也有…...

基础篇11-图像分割(上)--阈值的方法

图像分割是图像处理的重要内容&#xff0c;是位于底层的图像处理、特征提取与上一层次的图像分析之间的关键步骤。图像分割的相关技术较多&#xff0c;分为三篇介绍。本节是上篇&#xff0c;介绍基于阈值的技术。 1 引言 图像分割是计算机视觉和图像处理中的核心任务之一&…...

[特殊字符] LeetCode 62. 不同路径 | 动态规划+递归优化详解

在解 LeetCode 的过程中&#xff0c;路径计数问题是动态规划中一个经典的例子。今天我来分享一道非常基础但极具代表性的题目——不同路径。不仅适合初学者入门 DP&#xff08;动态规划&#xff09;&#xff0c;还能帮助你打下递归思维的基础。 本文将介绍&#xff1a; &…...

常用的 JVM 参数:配置与优化指南

文章目录 常用的 JVM 参数&#xff1a;配置与优化指南引言 1. 内存管理参数1.1 堆内存配置1.2 方法区&#xff08;元空间&#xff09;配置1.3 直接内存配置 2. 垃圾回收参数2.1 垃圾回收器选择2.2 GC 日志配置2.3 GC 调优参数 3. 性能监控参数3.1 堆内存转储3.2 JVM 监控3.3 远…...

【JavaWeb学习Day17】

Tlias智能学习系统&#xff08;员工管理&#xff09; 新增员工&#xff1a; 三层架构职责&#xff1a; Controller&#xff1a;1.接收请求参数&#xff08;员工信息&#xff09;&#xff1b;2.调用service方法&#xff1b;3.响应结果。 具体实现&#xff1a; /***新增员工…...

DeepSeek 提示词:定义、作用、分类与设计原则

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

前端大文件上传

1. 开场概述 “大文件上传是前端开发中常见的需求&#xff0c;但由于文件体积较大&#xff0c;直接上传可能会遇到网络不稳定、服务器限制等问题。因此&#xff0c;通常需要采用分片上传、断点续传、并发控制等技术来优化上传体验” 2. 核心实现方案 “我通常会采用以下方案…...

JDK源码系列(一)Object

Object 概述 Object类是所有类的基类——java.lang.Object。 Object类是所有类的基类&#xff0c;当一个类没有直接继承某个类时&#xff0c;默认继承Object类Object类属于java.lang包下&#xff0c;此包下的所有类在使用时无需手动导入&#xff0c;系统会在程序编译期间自动…...

【Python 打造高效文件分类工具】

【Python】 打造高效文件分类工具 一、代码整体结构二、关键代码解析&#xff08;一&#xff09;初始化部分&#xff08;二&#xff09;界面创建部分&#xff08;三&#xff09;核心功能部分&#xff08;四&#xff09;其他辅助功能部分 三、运行与使用四、示图五、作者有话说 …...

大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1)

Paimon的下载及安装&#xff0c;并且了解了主键表的引擎以及changelog-producer的含义参考&#xff1a; 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1) 利用Paimon表做lookup join&#xff0c;集成mysql cdc等参考&#xff1a; 大数据组件(四)快速入门实时数据…...

边缘安全加速(Edge Security Acceleration)

边缘安全加速&#xff08;Edge Security Acceleration&#xff0c;简称ESA&#xff09;是一种通过将安全功能与网络边缘紧密结合来提升安全性和加速网络流量的技术。ESA的目标是将安全措施部署到接近用户或设备的地方&#xff0c;通常是在网络的边缘&#xff0c;而不是将所有流…...

C/C++高性能Web开发框架全解析:2025技术选型指南

一、工业级框架深度解析&#xff08;附性能实测&#xff09; 1. Drogon v2.1&#xff1a;异步框架性能王者 核心架构&#xff1a; Reactor 非阻塞I/O线程池&#xff08;参考Nginx模型&#xff09; 协程实现&#xff1a;基于Boost.Coroutine2&#xff08;兼容C11&#xff09;…...

fedora 安装 ffmpeg 过程记录

参考博客&#xff1a;1. linux(centos)安装 ffmpeg,并添加 libx264库&#xff1a;https://blog.csdn.net/u013015301/article/details/140778199ffmpeg 执行时如添加参数 -vcodec libx264&#xff0c;会出现错误&#xff1a;Unknown encoder libx264’的错误&#xff0c;缺少li…...

【GPU驱动】OpenGLES图形管线渲染机制

OpenGLES图形管线渲染机制 OpenGL/ES 的渲染管线也是一个典型的图形流水线&#xff08;Graphics Pipeline&#xff09;&#xff0c;包括多个阶段&#xff0c;每个阶段都负责对图形数据进行处理。管线的核心目标是将图形数据转换为最终的图像&#xff0c;这些图像可以显示在屏幕…...

Spring Boot项目@Cacheable注解的使用

Cacheable 是 Spring 框架中用于缓存的注解之一&#xff0c;它可以帮助你轻松地将方法的结果缓存起来&#xff0c;从而提高应用的性能。下面详细介绍如何使用 Cacheable 注解以及相关的配置和注意事项。 1. 基本用法 1.1 添加依赖 首先&#xff0c;确保你的项目中包含了 Spr…...

mac开发环境配置笔记

1. 终端配置 参考&#xff1a; Mac终端配置笔记-CSDN博客 2. 下载JDK 到 oracle官网 下载jdk: oracle官网 :Java Downloads | Oraclemac的芯片为Intel系列下载 x64版本的jdk&#xff1b;为Apple Mx系列使用 Arm64版本&#xff1b;oracle官网下载时报错&#xff1a;400 Bad R…...

重装CentOS YUM

1. 检查是否已安装 YUM 运行以下命令检查 YUM 是否已安装&#xff1a; yum list installed | grep yum 如果输出中包含 yum&#xff0c;则说明 YUM 已安装。 2. 卸载旧版本的 YUM&#xff08;如有必要&#xff09; 如果需要重新安装 YUM&#xff0c;可以先卸载旧版本&…...

对免认证服务提供apikey验证

一些服务不带认证&#xff0c;凡是可以访问到服务端口&#xff0c;都可以正常使用该服务&#xff0c;方便是方便&#xff0c;但是不够安全。 比如ollama默认安装后就是这样。现在据说网上扫一下端口11434&#xff0c;免apikey的ollama服务一大堆。。。 那我们怎样将本机安装的o…...

数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)

数据库驱动找起来好麻烦&#xff0c;我整理到了一起&#xff0c;需要的朋友免费下载&#xff1a;驱动下载 目前收录了Oracle、Mysql、达梦、Postgresql的数据库驱动的多个版本&#xff0c;后续可能会分享更多。...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

WebRTC调研

WebRTC是什么&#xff0c;为什么&#xff0c;如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

CMS内容管理系统的设计与实现:多站点模式的实现

在一套内容管理系统中&#xff0c;其实有很多站点&#xff0c;比如企业门户网站&#xff0c;产品手册&#xff0c;知识帮助手册等&#xff0c;因此会需要多个站点&#xff0c;甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...