【redisson实现发布订阅】1.支持多个订阅者 2.没监听的当时没收到就再也收不到了 3.RTopic创建主题 addListener监听 publish发布
redisson
Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring Cache, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache ...
项目地址:https://gitcode.com/gh_mirrors/re/redisson

·
pom.xml
<dependencies>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.1</version>
</dependency>
</dependencies>
Car.java
package org.example;
import java.io.Serializable;
public class Car implements Serializable {
private static final long serialVersionUID = -1L;
private double price;
private String colour;
public Car(double price, String colour) {
this.price = price;
this.colour = colour;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getColour() {
return colour;
}
public void setColour(String colour) {
this.colour = colour;
}
@Override
public String toString() {
return colour + "car costs $" + price;
}
}
Client.java
package org.example;
import org.redisson.Redisson;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.redisson.api.listener.MessageListener;
import org.redisson.codec.SerializationCodec;
import org.redisson.config.Config;
public class Client {
public static void main(String[] args) {
RedissonClient redisson = null;
try{
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
redisson = Redisson.create(config);
RTopic topic = redisson.getTopic("dw",new SerializationCodec());
topic.addListener(Car.class, new MessageListener<Car>() {
@Override
public void onMessage(CharSequence charSequence, Car car) {
System.out.println("onMessage:"+charSequence+"; Thread: "+Thread.currentThread().toString());
System.out.println(car.getColour()+" price : "+car.getPrice());
}
});
}
catch (Exception ex){
System.out.println(ex.getMessage());
}
finally {
}
}
}
/*
onMessage:dw; Thread: Thread[redisson-3-12,5,main]
white price : 120000.0
*/
Server.java
package org.example;
import org.redisson.Redisson;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.redisson.codec.SerializationCodec;
import org.redisson.config.Config;
import java.util.concurrent.TimeUnit;
public class Server {
public static void main(String[] args) {
RedissonClient redisson = null;
try{
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
redisson = Redisson.create(config);
RTopic topic1 = redisson.getTopic("dw", new SerializationCodec());
while (true){
topic1.publish(new Car(120000,"white"));
TimeUnit.SECONDS.sleep(1);
}
}
catch (Exception ex){
System.out.println(ex.getMessage());
}
finally {
redisson.shutdown();
}
}
}
总结:
1.redisson支持多个订阅者,1对多的发布。
2.主题相当于serverId,这样子,每个RTopic既是订阅者,又是发布者,因此可以充当MQ的功能用于服务之间的通信。
----------------20220326----------
redis还是以缓存为主。
当然了可以充当轻量级的进程间通信的工具,比如:这里的java类热加载,不经常发生,就可以使用这个轻量级的redisson实现。
还可以充当轻量级的服务发现,这样子让依赖的中间件更少一点。




Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, SortedSet, Map, List, Queue, Deque, Semaphore, Lock, AtomicLong, Map Reduce, Bloom filter, Spring Cache, Tomcat, Scheduler, JCache API, Hibernate, RPC, local cache ...
最近提交(Master分支:7 个月前 )
b37b7323
Fixed - PubSub stops working after Redis restart in sentinel mode #6026 7 天前
2595dc70
Signed-off-by: seakider <seakider@gmail.com>
11 天前
更多推荐
所有评论(0)