异步实现消息队列
来源:互联网 发布:seo编辑 编辑:程序博客网 时间:2024/04/30 17:06
为什么要使用队列,什么情况下才会使用队列?
那些实时性要求不高,且比较耗时的任务,是队列的最佳应用场景。比如说我在某网站注册一个账号,当我的信息入库注册成功后,网站需要发送一封激活邮件,让我激活账号,而这个发邮件的操作并不是需要实时响应的,没有必要卡在那个注册界面,等待邮件发送成功,再说发送邮件本来就是一个耗时的操作(需要调用第三方smtp服务器),此时,选择消息队列去处理。
就拿实际的点赞来说吧,用户的点赞请求到来,我只是将点赞请求投递到消息队列里面,后续的点赞请求可以将消息合并,即只更新点赞数,不产生新的任务。
**思路:典型的生产者消费者模式:**1、在controller请求时候把相关的事情生产出来,加入到redis中2、在消费类中运用afterPropertiesSet,applicationContext.getBeansOfType(EventHandler.class)获取指定bean中的事件handler,并构造成Map <EventType,List<EventHandler>>数据结构3、消费类中,开启新的线程,遍历构造的Map<EventType,List< EventHandler>>,并遍历handler方法。**需要关心的5个类:**一、model(event):作为key二、handler:事件处理的方法,比如,点赞需要发消息,messageDao.add(message)三、producer:把model序列化,并存储到lpush到工厂中四、consumer:implements ApplicationContextAware,通过setApplicationContext获取applicationContext;implements InitializingBean 通过afterPropertiesSet,构造所需要的数据结构:Map<EventType,List< EventHandler>>1、beans=applicationContext.getBeansOfType(EventHandler.class);上下获取事件处理handler2、构造所需要的数据结构3、开启线程,jedis中获取数据,遍历event,并执行event所有需要处理的handler方法;五、controller客户端类,只需要调用producer,把事件加入到redis即可
0 0
- 异步实现消息队列
- 使用Redis实现异步消息队列
- 异步消息队列
- laravel 异步消息队列
- nmq异步消息队列学习
- java之异步消息队列
- ASIHTTPRequest实现异步队列
- Spring + JMS + ActiveMQ实现简单的消息队列(监听器异步实现)
- Spring + JMS + ActiveMQ实现简单的消息队列(监听器异步实现)
- 循环消息队列实现
- ActiveMQ实现消息队列
- 消息队列实现即时通讯
- php 实现消息队列
- Redis实现消息队列
- redis实现消息队列
- redis实现消息队列
- redis实现消息队列
- 消息队列实现通信
- 数据结构与算法之排序算法---简单选择排序
- Android studio 2.2引入第三方Jar包的方法
- picamera 1.10 教程及api中文简译(一)在python2.7/3.2+上安装 picamera
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E. Goods transportation 动态规划
- [从头学绘画] 第34节 跆拳道二十四品势之5-栗谷
- 异步实现消息队列
- nginx
- Go 根据字符串调用指定函数
- PLSQL连接oracle的配置
- Visual Studio2013编译ACE静态库
- 【转载】C#连接数据库及读取数据库中字段的简单方法总结
- 电磁阀的作用与原理
- 一、基本数据类型的转换
- 百分比布局的基本用法