springboot 2.x redis 实现消息队列

 

一. 常用消息队列工具

  目前常用的消息队列大概有三种类型,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);
	}

}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring BootRedis结合实现消息队列的方法如下: 1. 首先,确保你的Spring Boot项目中已经引入了Redis的依赖。 2. 创建一个消息发布者类,用于发布消息Redis消息队列中。可以使用RedisTemplate来实现消息的发布。以下是一个示例代码: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; @Component public class MessagePublisher { @Autowired private RedisTemplate<String, Object> redisTemplate; public void publish(String channel, Object message) { redisTemplate.convertAndSend(channel, message); } } ``` 3. 创建一个消息订阅者类,用于监听Redis消息队列并处理接收到的消息。可以使用@RedisListener注解来实现消息的订阅。以下是一个示例代码: ```java import org.springframework.data.redis.connection.Message; import org.springframework.data.redis.connection.MessageListener; import org.springframework.stereotype.Component; @Component public class MessageSubscriber implements MessageListener { @Override public void onMessage(Message message, byte[] pattern) { String channel = new String(message.getChannel()); String body = new String(message.getBody()); // 处理接收到的消息 System.out.println("Received message: " + body + " from channel: " + channel); } } ``` 4. 在需要发布消息的地方,通过调用消息发布者类的publish方法来发布消息。以下是一个示例代码: ```java @Autowired private MessagePublisher messagePublisher; public void sendMessage(String channel, Object message) { messagePublisher.publish(channel, message); } ``` 5. 在需要订阅消息的地方,通过在消息订阅者类的方法上添加@RedisListener注解来监听指定的频道。以下是一个示例代码: ```java @RedisListener(channels = "myChannel") public void handleMessage(String message) { // 处理接收到的消息 System.out.println("Received message: " + message); } ``` 通过以上步骤,你就可以使用Spring BootRedis结合实现消息队列了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值