当前位置: 首页 > news >正文

做外贸最适合的网站系统开网站怎么开

做外贸最适合的网站系统,开网站怎么开,利用html做博客网站,网站跨机房建设方案📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • 技术入门
    • 实战分享
    • 运用场景
    • 总结陈词


写在前面的话

企业实战开发中,事件监听的运用场景非常多,当某事件发生的时候,会触发某个响应处理,其主要优势体现在多负载实例的场景下。与前几篇博文《知识点扫盲 · 监听器 Listener》《后端程序猿 · 基于 Lettuce 实现缓存容错策略》提到的观察者模式、发布订阅模式等,有异曲同工之妙。
本篇文章先介绍一下,框架封装人员如何处理事件监听场景,默认基于 RedisMessageListenerContainer实现,下面以此技术加以说明。


技术入门

【技术简介】
RedisMessageListenerContainer 是 Spring Data Redis 提供的一个类,用于异步处理 Redis 中的发布/订阅消息。它利用 Redis 的发布/订阅机制,通过消息通道(channel)或模式(pattern)订阅消息,并在消息到达时触发相应的监听器方法。该机制广泛应用于实时数据处理、消息广播等场景。

【使用入门】
Step1、引入 Maven 依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Step2、注册消息监听 Bean,订阅事件

@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);container.setTaskExecutor(this.defaultTaskExecutor());Topic websocket = new ChannelTopic("websocket");Topic versionUpdate = new ChannelTopic("versionUpdate");List<Topic> list = new ArrayList<>();list.add(websocket);list.add(versionUpdate);WebsocketRedisMessageListener listener = new WebsocketRedisMessageListener();listener.setRedisTemplate(redisTemplate);container.addMessageListener(listener, list);return container;
}

Step3、实现监听消费逻辑

public class WebsocketRedisMessageListener implements MessageListener {@Overridepublic void onMessage(Message message, byte[] pattern) {try {String msgChannel = new String(pattern);String msgBody = (String) getRedisTemplate().getValueSerializer().deserialize(message.getBody());switch (msgChannel) {case TOPIC_VERSION:VersionSocket versionSocket = new VersionSocket();versionSocket.sendMessageAll(msgBody);break;default:LOGGER.warn("处理redis主题, 找不到对应的主题,{}", msgChannel);break;}} catch (Exception e) {LOGGER.error("处理redis事件失败:{}", ExceptionUtil.stacktraceToString(e));}}
}

Step4、按需发布事件

redisTemplate.convertAndSend("versionUpdate", JSON.toJSONString(versionUpdate));

【拓展说明】
通过 RedisMessageListenerContainer 还可以实现针对 Redis-Key 增删改以及过期的监听。
这不是本篇文章重点,详情搜索:KeyExpirationEventMessageListener、 PatternTopic 等关键词。


实战分享

设计思路:
技术基础入门介绍完了,功能可以实现,但是步骤略多,作为框架封装开发人员,肯定要帮忙加工一下,不可能放任各业务部门的开发人员随意添加,那可能出现各种奇葩问题,还需要架构人员兜底。
接下来分享一下实战经验:
1、事件监听的实现方式有多种,框架集成了 Redis 监听方式,作为事件总线模块的默认底层实现。如果想使用其他中间件来替代默认实现,也预留了接口,方便替换,Redis 监听实现的关键技术依然是RedisMessageListenerContainer
2、将消息监听器Bean的定义工作放到框架核心包处理,包含设定默认线程池等
3、提供快速使用消费功能的接口,开发人员只需要按规约实现接口即可完成订阅工作
4、提供发布消息的API,统一操作入口

下面贴一下代码,展示封装后,开发人员如何使用:

//订阅事件
public class PortalEventListener implements ZhanshenEventListener {/*** 订阅事件KEY*/public static final Set<String> PATTERN_KEY = Set.of("zhanshen.portal");@Overridepublic Set<String> patterns() {return PATTERN_KEY;}@Overridepublic void handleEvent(ZhanshenEvent zhanshenEvent) {log.info("收到事件消息,pattern:{},data:{} ", zhanshenEvent.getPattern(), zhanshenEvent.getData());}
}//发布事件
ZhanshenEventListener.publishEvent("zhanshen.portal", "测试事件消息");//补充:可以定义多个ZhanshenEventListener实现类,框架会统一帮忙触发。

题外话:注意事项
封装过程中,遇到一个小坑,分享一下:
RedisMessageListenerContainer 的默认使用线程池是SimpleAsyncTaskExecutor,每次消费都会创建一个线程来处理,这样就会有大量的新线程被创建。生产环境下建议使用自定义线程池,减少性能损耗。


运用场景

在实际开发中,每个后端服务都会有多个实例,在这种情况下,当一个接口触发的时候,需要所有实例都做出响应,那事件监听机制就非常有用了。

场景1:WebSocket 在线用户通知
博主所在公司采用WebSocket技术实现了统一门户工作站的消息通知推送功能,用户登录的时候,需要调用后端接口,存储在线用户列表数据,这时候可能信息存储在某一个实例中。
当需要给用户发通知的时候,需要拉取到所在后端的用户 Session,进行 WebSocket 的 send操作。这时候由于后端是多实例,有可能没有存储相关用户信息,这时候可以通过事件监听方式,通知各个实例触发该操作。

场景2:static 静态变量的更新
某些情况,会使用静态变量维护一些数据,当要对这些数据进行修改,仅仅触发某个后端实例的接口,是不够的,可以通过事件监听机制,其他实例也订阅该动作,同步更新相关变量。

Tips:还有很多场景,这边不赘述了,自行发散。


总结陈词

上文介绍了框架封装人员,如何处理事件监听逻辑,提供了一些思路分享。
事件监听更多情况下是订阅了事件,需要由外部主动发布事件,才能触发响应逻辑。其实还有数据监听、缓存监听等技术方案,即数据变化等情况下,会自动触发响应,比如:Redis-Key 的过期监听、OGG for Bigdata 的 Oracle 数据变化监听,关于这一点后面再开文章介绍。
本系列博文将介绍框架搭建人员如何以恰当的方式应对各式各样的情况,这也是此专栏的主题。
💗 后续将持续更新,请多多支持!

http://www.yayakq.cn/news/943538/

相关文章:

  • 网站平台怎么做的好广东seo推广方案
  • 上海网站建设哪家服务好wordpress可以做博客么
  • 上海网站制作公司有哪些教学资源系统网站建设方案
  • 上哪儿找做网站的客户潮州有没有做网站的人
  • 可以做试卷的网站wordpress文章内乱码
  • 织梦响应式茶叶网站山西大川建设有限公司网站
  • 做公司网站的尺寸一般是多大湛江专业网站制作
  • 沈阳妇科检查去哪个医院较好南昌seo排名外包
  • 做点小本意 哪个网站拿货便宜点个人网站如何建立
  • 任务发布网站建设重庆建设网站哪里好
  • 织梦网站提示保存目录数据时报网站接入地
  • 四川省建设厅建造师官方网站义乌系统开发
  • 设计网站要多久html 手机网站开发
  • 免费微网站有哪些公司做网站最低需用多少钱
  • 自适应网站运动div如何设置的前端程序员招聘信息
  • 潍坊高端模板建站装修公司做网站好做吗
  • wordpress采集织梦网站文章衡水网站建设设计
  • 用织梦做网站快吗注册网站域名平台
  • wordpress做一个网站404引导健身房页面设计大纲
  • dw6做网站wordpress自定义404页面
  • 果酷网的网站建设简介深圳有哪些网站建设公司
  • 天津做网站网页的公司dede网站 远程生成
  • 网站建设与管理自考重点苏州推广有限公司
  • 天津市建设网站手机网站解析地址
  • 怎么建一个免费的网站潍坊网站建设诸城高密
  • 专做短篇的网站个人网页设计思路
  • 做投标需要知道什么网站手机免费推广软件
  • 建设行网站修改电话品牌运营策划
  • 深圳东莞网站开发有限责任公司属于什么企业类型
  • 网站做优化有用吗人与马做网站