简述
在本博客中,我们将会创建一个reids的消息队列,Redis可以被当成消息队列使用。消息会被存放在一个key-value集合中。
redis消息生产者使用RPUSH命令将消息添加到队列的尾部,而消息消费者可以使用BLPOP命令获取列表开头的消息,使用FIFO(先进先出)规则。
注意:本博客前置条件,熟悉redis并且知道如何启动redis服务器
Redis 队列实现需要的maven依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.leftso.redis</groupId>
<artifactId>message-queue</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>REDDIS - ${project.artifactId}</name>
<url>http://leftso.com</url>
<dependencies>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
</dependencies>
</project>
Redis消息队列生产者
我们先使用rpush()方法将消息发布到mq-key队列中。这条消息将会添加到列表的最末端。
import redis.clients.jedis.Jedis;
public class MessageProducer {
public static void main(String... args) {
Jedis jedis = new Jedis("localhost");
jedis.rpush("mq-key", "first message");
jedis.rpush("mq-key", "second message");
jedis.rpush("mq-key", "third message");
}
}
Redis消息队列消费者
我们可以使用lpop()或者blpop()方法来消费消息。下面我们将会使用阻塞的lpop 方法,就如方法名称一样,使用该方法线程会进入阻塞状态直到下一个消息过来。我们可以设置一个等待消息的超时时间。下面设置的超时时间为0,表示永久等待没有超时时间。
import redis.clients.jedis.Jedis;
import java.util.List;
public class MessageConsumer {
private static final int TIMEOUT = 0;
public static void main(String... args ) {
Jedis jedis = new Jedis("localhost");
while(true){
System.out.println("Waiting for a message in the queue");
List<String> messages = jedis.blpop(TIMEOUT, "mq-key");
System.out.println("received message with key:" + messages.get(0) + " with value:" + messages.get(1));
}
}
}
启动消息队列消费者
$title(console)
Waiting for a message in the queue
启动消息队列生产者
$title(console)
Waiting for a message in the queue
received message with key:mq-key with value:first message
Waiting for a message in the queue
received message with key:mq-key with value:second message
Waiting for a message in the queue
received message with key:mq-key with value:third message
Waiting for a message in the queue
参考文档:
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/243623.html