NutzCN Logo
问答 RedisService.subscribe 无法生效
发布于 1956天前 作者 wx_rqo4iimrf6k3bnr9rvqu 1445 次浏览 复制 上一个帖子 下一个帖子
标签:

使用注入的 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();
	}
}
4 回复

代码在nutzmore,来个pull request试试?

添加回复
请先登陆
回到顶部