使用注入的 RedisService 的 subscribe() 方法无法生效,在其他地方使用 RedisService 的其他方法都没有问题,唯独订阅的时候必须要把 RedisService.subscribe() 改成 JedisPool 得到的 Jedis.subscribe()
只要在订阅的地方改成 JedisPool 就好了,其他地方都没变,发布都是用的 RedisService.publish()
@IocBean(create="init")
public class JedisBean {
@Inject
private OrderService orderService;
@Inject
private JedisPool jedisPool;
public void init() {
new Thread(new Runnable() {
@Override
public void run() {
try (Jedis jedis = jedisPool.getResource()) {
// 这里用RedisService无法成功,只能改成JedisPool方式
jedis.subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
if (Strings.equals(channel, PAY_RESULT_PUB_CHANEL) && Strings.isNotBlank(message)) {
Message m = Json.fromJson(Message.class, message);
try {
orderService.dealPayResult(m.getContent());
} catch (Exception e) {
}
}
}
}, PAY_RESULT_PUB_CHANEL);
}
}
}).start();
}
}