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

java实现redis的消息发送和消费,类似kafka功能

确保在 pom.xml 中添加了 Spring Data Redis 和 Jedis 的依赖。如下所示:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>

配置 Redis 连接
在这里插入图片描述

使用 RedisTemplate 进行操作

在 Spring Boot 中,推荐使用 RedisTemplate 进行 Redis 操作,而不是直接使用 Jedis。下面是如何创建和使用 RedisTemplate 的示例。

创建 RedisConfig 类
创建一个配置类来定义 RedisTemplate 的 Bean

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(connectionFactory);return template;}
}

使用 RedisTemplate 发送和接收消息

接下来,可以使用 RedisTemplate 进行消息的发送和接收。

发送消息
创建一个消息生产者的类:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;@Service
public class MessageProducer {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void sendMessage(String queueName, String message) {redisTemplate.opsForList().leftPush(queueName, message);System.out.println("Message sent to queue: " + message);}
}

接收消息 创建一个消息消费者的类:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;@Service
public class MessageConsumer {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void consumeMessage(String queueName) {String message = (String) redisTemplate.opsForList().rightPop(queueName);if (message != null) {System.out.println("Message received from queue: " + message);} else {System.out.println("No message in queue.");}}
}

使用 Publish/Subscribe 模式

对于使用发布/订阅模式,可以创建一个订阅类,并使用 Spring 的 @MessageMapping 注解或直接使用
JedisPubSub。

发布者

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;@Service
public class Publisher {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void publishMessage(String channelName, String message) {redisTemplate.convertAndSend(channelName, message);System.out.println("Message published to channel " + channelName + ": " + message);}
}

订阅者

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;@Service
public class Subscriber {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;public void subscribe(String channelName) {Jedis jedis = (Jedis) redisTemplate.getConnectionFactory().getConnection().getNativeConnection();jedis.subscribe(new JedisPubSub() {@Overridepublic void onMessage(String channel, String message) {System.out.println("Message received from channel " + channel + ": " + message);}}, channelName);}
}

启动应用

确保你的应用程序使用了 Spring Boot 的 @SpringBootApplication 注解,并启动应用。

http://www.lryc.cn/news/467623.html

相关文章:

  • 【软件设计】常用设计模式--代理模式
  • 生命与自由,抑郁的来源
  • CTFHUB技能树之文件上传——双写后缀
  • SpringBoot整合HTTPS
  • LVGL-从入门到熟练使用
  • 【MySQL数据库】MySQL读写分离
  • 深度学习:简单计算图的反向传播传递导数计算
  • 学习AJAX请求(初步)24.10.21-10.23
  • 初识算法——二分查找
  • 深入剖析 Java Spring 中的 @Autowired、@Resource、@Qualifier、@Inject 注解:使用详解与注意事项
  • ThingsBoard规则链节点:Delete Attributes节点详解
  • 关于作为面试官以及如何准备面试的一些心得
  • Bean对象 和 普通对象 的区别
  • lego-loam featureAssociation 源码注释(二)
  • Claude 3.5 的六大应用场景
  • 进程线程知识总结
  • Rsync数据复制/备份服务应用
  • 如何为自己的跨境网站添加多国语言翻译功能及推荐起尔网定制与插件开发
  • 安全见闻(3)——开阔眼界,不做井底之蛙
  • MySQL 的意向锁(Intention Locks)原理详解
  • 31个省份农业科技水平(农业技术创新或农业科技专利数据)2010-2022年
  • Python代码执行失败问题及解决方案
  • Java 遗传算法
  • C++ (一) 基础语法
  • Qt/C++路径轨迹回放/回放每个点信号/回放结束信号/拿到移动的坐标点经纬度
  • C 语言介绍及操作案例
  • Ivanti云服务被攻击事件深度解析:安全策略构建与未来反思
  • 如何做出正确选择编程语言:关于Delphi 与 C# 编程语言的优缺点对比
  • 39.3K Star,一个现代的数据库ORM工具,专为Node.js和TypeScript设计
  • Nginx和Mysql的基础命令