redis也可以作为消息队列使用,优缺点如下:
优点:
缺点:
实现消息队列的步骤如下。
在pom.xml中添加
spring-boot-starter-data-redis依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
在Application.properties文件中配置Redis连接信息。
spring.redis.host=localhost
spring.redis.port=6379
创建2个消息监听器,用于接收订阅的消息。
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
public class MyMessageListener1 implements MessageListener {
@Override
public void onMessage(Message message, byte[] pattern) {
System.out.println("Received message1: " + message.toString());
}
}
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
public class MyMessageListener2 implements MessageListener {
@Override
public void onMessage(Message message, byte[] pattern) {
System.out.println("Received message2: " + message.toString());
}
}
使用RedisTemplate的convertAndSend()方法向指定频道发布消息。
@Autowired
private RedisTemplate<String, String> redisTemplate;
public void publishMessage(String channel, String message) {
redisTemplate.convertAndSend(channel, message);
}
创建一个
RedisMessageListenerContAIner对象,使用addMessageListener()方法添加消息监听器并订阅指定频道。
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Autowired
private MyMessageListener1 myMessageListener1;
@Autowired
private MyMessageListener2 myMessageListener2;
@Bean
public RedisMessageListenerContainer redisContainer() {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(redisConnectionFactory);
container.addMessageListener(myMessageListener1, new ChannelTopic("my_channel1"));
container.addMessageListener(myMessageListener2, new ChannelTopic("my_channel2"));
return container;
}
调用 publishMessage() 方法测试消息发布订阅流程。
publishMessage("my_channel1", "msg1");
publishMessage("my_channel2", "msg2");
那么MyMessageListener1将接收到my_channel1的消息,并打印出msg1消息。
MyMessageListener2将接收到my_channel2的消息,并打印出msg2消息。