千家信息网

JavaWeb项目为什么需要Redis做消息队列

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,本篇内容主要讲解"JavaWeb项目为什么需要Redis做消息队列",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"JavaWeb项目为什么需要Redis做消
千家信息网最后更新 2025年01月19日JavaWeb项目为什么需要Redis做消息队列

本篇内容主要讲解"JavaWeb项目为什么需要Redis做消息队列",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"JavaWeb项目为什么需要Redis做消息队列"吧!

摘要:

架构、分布式、日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Redis做消息队列罢了。 为什么需要消息队列? 当系统中出现"生产"和"消费"的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。

架构、分布式、日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Redis做消息队列罢了。

为什么需要消息队列?

当系统中出现"生产"和"消费"的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。

比如我们系统中常见的邮件、短信发送,把这些不需要及时响应的功能写入队列,异步处理请求,减少响应时间。

如何实现?

成熟的JMS消息队列中间件产品市面上有很多,但是基于目前项目的架构以及部署情况,我们采用Redis做消息队列。

为什么用Redis?

Redis中list数据结构,具有"双端队列"的特性,同时redis具有持久数据的能力,因此redis实现分布式队列是非常安全可靠的。

它类似于JMS中的"Queue",只不过功能和可靠性(事务性)并没有JMS严格。Redis本身的高性能和"便捷的"分布式设计(replicas,sharding),可以为实现"分布式队列"提供了良好的基础。

提供者端

项目采用第三方redis插件spring-data-redis,不清楚如何使用的请自行谷歌或者百度。

redis.properties:

#redis 配置中心 redis.host=192.168.1.180redis.port=6379redis.password=123456redis.maxIdle=100 redis.maxActive=300 redis.maxWait=1000 redis.testOnBorrow=true redis.timeout=100000

redis配置:

                                       

切面日志配置(伪代码):

/** * 系统日志,切面处理类 * 创建者 小柒2012 * 创建时间  2018年1月15日 */@Component@Scope@Aspectpublic class SysLogAspect {  @Autowired  private RedisTemplate redisTemplate;  //注解是基于swagger的API,也可以自行定义  @Pointcut("@annotation(io.swagger.annotations.ApiOperation)")  public void logPointCut() {   }  @Around("logPointCut()")  public Object around(ProceedingJoinPoint point) throws Throwable {    Object result = point.proceed();    //把日志消息写入itstyle_log频道    redisTemplate.convertAndSend("itstyle_log","日志数据,自行处理");    return result;  }}

消费者端

Redis配置:

                                                                                       

监听接口:

public interface MessageDelegateListener {  public void handleLog(Serializable message);}

监听实现:

public class MessageDelegateListenerImpl implements MessageDelegateListener {    @Override    public void handleLog(Serializable message) {      if(message == null){        System.out.println("null");      }else {        //处理日志数据      }    }}

到此,相信大家对"JavaWeb项目为什么需要Redis做消息队列"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0