springboot 2.x redis 实现消息队列

本文介绍如何在SpringBoot项目中集成Redis消息队列,包括消息发布与订阅的实现方式,并对比了不同消息队列工具的特点及适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一. 常用消息队列工具

  目前常用的消息队列大概有三种类型,RabbitMQ等AMQP系列, Kafka, Redis等kev value系列,它们的使用场景分别是: 
  1.RabbitMQ: 相对重量级高并发的情况,比如数据的异步处理 任务的串行执行等. 
  2.Kafka: 基于Pull的模式来处理,具体很高的吞吐量,一般用来进行 日志的存储和收集. 
  3.Redis: 轻量级高并发,实时性要求高的情况,比如缓存,秒杀,及时的数据分析

 

.二. SpringBoot基于Redis集成消息队

1.消息发布:使用redisTemplate.convertAndSend


@RestController
@RequestMapping
public class PublisherController {

    @Autowired
	private RedisTemplate<Object, Object> redisTemplate;

    @GetMapping(value = "pub/{msg}")
    public String pubMsg(@PathVariable String msg){
        redisTemplate.convertAndSend("demochannel",id);
        return msg;
    }
}

 

2.消息订阅

package com.cxm.consumer;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;


@Configuration
public class RedisSubConfig {

	/**
	 * 创建连接工厂
	 *
	 * @param connectionFactory
	 * @param adapter
	 * @return
	 */
	@Bean
	public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
			MessageListenerAdapter adapter) {
		RedisMessageListenerContainer container = new RedisMessageListenerContainer();
		container.setConnectionFactory(connectionFactory);
		//监听对应的channel
		container.addMessageListener(adapter, new PatternTopic("demochannel"));
		return container;
	}

	/**
	 * 	绑定消息监听者和接收监听的方法
	 * @param message
	 * @return
	 */
	@Bean
	public MessageListenerAdapter adapter(RedisMessageListener message) {
		// onMessage 如果RedisMessage 中 没有实现接口,这个参数必须跟RedisMessage中的读取信息的方法名称一样
		return new MessageListenerAdapter(message, "onMessage");
	}

}

MessageListener

@Component
public class RedisMessageListener implements MessageListener {

	@Autowired
	private RedisTemplate<Object, Object> redisTemplate;
	
	@Override
	public void onMessage(Message message, byte[] pattern) {
		RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
		String msg = serializer.deserialize(message.getBody());
		System.out.println("接收到的消息是:" + msg);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值