springboot结合redis实现redis订阅发布模式
来源:互联网 发布:mysql导入sql文件命令 编辑:程序博客网 时间:2024/06/07 01:42
redis订阅发布模式:
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者,订阅者和Channel。
发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。
实现功能:
通过网页访问一个网址的时候实现redis在某个频道的的发布,同时订阅了该频道的redis订阅者会做出相应的反应。
要想让redis在web容器开启时就一直处于订阅状态,考虑通过listener来实现:
Listener:
@Configuration@WebListenerpublic class MyListenerOnServlet implements ServletContextListener{ @Override public void contextInitialized(ServletContextEvent servletContextEvent) { System.out.println("ServletContext容器初始化了。。。"); Thread threadOnRedis = new TestSubscribe(); threadOnRedis.start(); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("ServletContext容器销毁了。。。"); }}TestSubScribe线程类:
public class TestSubscribe extends Thread { @Override public void run() { JedisShardInfo jedisShardInfo = new JedisShardInfo("127.0.0.1", 6379); jedisShardInfo.setPassword("admin"); Jedis jedis = new Jedis(jedisShardInfo); RedisMsgPubSubListener listener = new RedisMsgPubSubListener(); jedis.subscribe(listener, "redisChatTest"); System.out.println("不阻塞"); }}
RedisMsgPubSubListener类:
public class RedisMsgPubSubListener extends JedisPubSub { @Override public void unsubscribe() { super.unsubscribe(); } @Override public void unsubscribe(String... channels) { super.unsubscribe(channels); } @Override public void subscribe(String... channels) { super.subscribe(channels); } @Override public void psubscribe(String... patterns) { super.psubscribe(patterns); } @Override public void punsubscribe() { super.punsubscribe(); } @Override public void punsubscribe(String... patterns) { super.punsubscribe(patterns); } @Override public void onMessage(String channel, String message) { System.out.println("channel:" + channel + "receives message :" + message);// this.unsubscribe(); } @Override public void onPMessage(String pattern, String channel, String message) { } @Override public void onSubscribe(String channel, int subscribedChannels) { System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels); } @Override public void onPUnsubscribe(String pattern, int subscribedChannels) { } @Override public void onPSubscribe(String pattern, int subscribedChannels) { } @Override public void onUnsubscribe(String channel, int subscribedChannels) { System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels); }}
通过controller的访问来触发redis的发布:
Controller:
@RequestMapping("/t07") public String test07(@RequestParam("msg") String s){ testService.testRedisForMsg(s); return "完成"; }Service:
@Servicepublic class TestService { @Autowired private JedisPool jedisPool; @Autowired private UserMapper userMapper; public void testRedisForMsg(String msg){ Jedis jedis = jedisPool.getResource(); try{ jedis.publish("redisChatTest", msg); }catch (Exception e){ System.out.println("发布出错:"+e.toString()); }finally { if(jedis!=null){ jedis.close(); } } }}jedispool配置就不解释了。差不多就是这样,在浏览器访问触发redis发布的时候,本例的响应是在控制台输出发布信息。
输出信息:
channel:redisChatTestreceives message :lvelvelve相应可以自己决定,感觉又学到了好玩的东西。
阅读全文
0 0
- springboot结合redis实现redis订阅发布模式
- Redis发布订阅模式
- redis订阅发布模式
- redis-发布、订阅模式
- redis 发布/订阅模式
- Redis发布/订阅模式
- redis发布订阅模式
- redis实现发布/订阅
- redis实现发布订阅
- redis实现发布订阅
- Spring结合Redis实现消息发布与订阅
- redis的发布/订阅模式
- Redis发布与订阅模式
- SpringBoot集成Redis消息订阅发布
- redis发布订阅模式-redis系列教程
- spring-redis实现订阅发布
- Java实现Redis发布/订阅
- Java实现Redis发布订阅
- Java进阶(七)static关键字
- hibernate注解整合spring
- pandas基础__之__对数据进行筛选和排序
- 范围for循环(c++ primer 笔记)
- path-sum
- springboot结合redis实现redis订阅发布模式
- iOS---scrollview自动下移问题
- 浅谈PHP与手机APP开发即API接口开发
- new与malloc
- leetcode 274. H-Index
- 编辑修改公众号资料-微信公众号使用教程6
- EditText属性大全详解
- JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
- struts2值的传递与接收总结