当前位置: 首页 > 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请求。
http://www.lryc.cn/news/540902.html

相关文章:

  • Deepseek 怼CHATGPT实况
  • 基础篇11-图像分割(上)--阈值的方法
  • [特殊字符] LeetCode 62. 不同路径 | 动态规划+递归优化详解
  • 常用的 JVM 参数:配置与优化指南
  • 【JavaWeb学习Day17】
  • DeepSeek 提示词:定义、作用、分类与设计原则
  • 前端大文件上传
  • JDK源码系列(一)Object
  • 【Python 打造高效文件分类工具】
  • 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(1)
  • 边缘安全加速(Edge Security Acceleration)
  • C/C++高性能Web开发框架全解析:2025技术选型指南
  • fedora 安装 ffmpeg 过程记录
  • 【GPU驱动】OpenGLES图形管线渲染机制
  • Spring Boot项目@Cacheable注解的使用
  • mac开发环境配置笔记
  • 重装CentOS YUM
  • 对免认证服务提供apikey验证
  • 数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)
  • OceanBase 初探学习历程之——安装部署
  • Windows 下免费开源的多格式文件差异对比工具
  • Vue3+element UI:使用el-dialog时,对话框不出现解决方案
  • postman调用ollama的api
  • PyTorch的dataloader制作自定义数据集
  • 如何调用 DeepSeek API:详细教程与示例
  • Hadoop-HA集群部署
  • 三、linux字符驱动详解
  • 【Research Proposal】基于提示词方法的智能体工具调用研究——研究问题
  • 【从0做项目】Java文档搜索引擎(9)烧脑终章!
  • python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04