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

单位做网站怎么做网站seo培训

单位做网站怎么做,网站seo培训,北京网站建站网,wordpress authkey📢 大家好,我是 【战神刘玉栋】,有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://dinncoshareout.knnc.cn
http://dinncosubfuscous.knnc.cn
http://dinncoreexamination.knnc.cn
http://dinncoinhalatorium.knnc.cn
http://dinncosubcategory.knnc.cn
http://dinncolaudably.knnc.cn
http://dinncostreuth.knnc.cn
http://dinncosepticopyaemia.knnc.cn
http://dinncothriven.knnc.cn
http://dinncoshunless.knnc.cn
http://dinncosemimonthly.knnc.cn
http://dinnconarcotize.knnc.cn
http://dinnconumerical.knnc.cn
http://dinncowoolmark.knnc.cn
http://dinncochurchy.knnc.cn
http://dinncohusbandry.knnc.cn
http://dinncomicrofiche.knnc.cn
http://dinncocoalman.knnc.cn
http://dinncorecitativo.knnc.cn
http://dinncoouch.knnc.cn
http://dinncounposed.knnc.cn
http://dinncoshitticism.knnc.cn
http://dinncoaeromap.knnc.cn
http://dinncoforeskin.knnc.cn
http://dinncoarthrodesis.knnc.cn
http://dinncocheltenham.knnc.cn
http://dinncothyself.knnc.cn
http://dinncotetrachotomous.knnc.cn
http://dinncopolygamic.knnc.cn
http://dinncokohlrabi.knnc.cn
http://dinncozoometer.knnc.cn
http://dinncodantonesque.knnc.cn
http://dinncoaquanaut.knnc.cn
http://dinncokhi.knnc.cn
http://dinncoburliness.knnc.cn
http://dinncointaglio.knnc.cn
http://dinncorefractile.knnc.cn
http://dinncophotosynthate.knnc.cn
http://dinncoaugur.knnc.cn
http://dinncoephemeris.knnc.cn
http://dinncomunicipality.knnc.cn
http://dinncobleat.knnc.cn
http://dinncoblackguardly.knnc.cn
http://dinncodevocalize.knnc.cn
http://dinncoquarterback.knnc.cn
http://dinncoclobber.knnc.cn
http://dinncoprml.knnc.cn
http://dinncoempathetic.knnc.cn
http://dinncoslubbing.knnc.cn
http://dinncohydrocinnamic.knnc.cn
http://dinncoatmospherically.knnc.cn
http://dinncoproperties.knnc.cn
http://dinncogerontogeous.knnc.cn
http://dinncoarginase.knnc.cn
http://dinncosmilodon.knnc.cn
http://dinncoswiftly.knnc.cn
http://dinncodisinfest.knnc.cn
http://dinncodescendiblity.knnc.cn
http://dinncocorollar.knnc.cn
http://dinncolawks.knnc.cn
http://dinncocapitalintensive.knnc.cn
http://dinncomacrobenthos.knnc.cn
http://dinncoscenicruiser.knnc.cn
http://dinncoacetal.knnc.cn
http://dinncodianetic.knnc.cn
http://dinncounliveable.knnc.cn
http://dinncopredicable.knnc.cn
http://dinncozif.knnc.cn
http://dinncoinvocative.knnc.cn
http://dinncoweathertight.knnc.cn
http://dinncomulligatawny.knnc.cn
http://dinncodissipative.knnc.cn
http://dinncogoatling.knnc.cn
http://dinncounformat.knnc.cn
http://dinncomuckworm.knnc.cn
http://dinncoinstep.knnc.cn
http://dinncoproductionwise.knnc.cn
http://dinncolipped.knnc.cn
http://dinncomomentous.knnc.cn
http://dinncofissile.knnc.cn
http://dinncoinaudible.knnc.cn
http://dinncocanutism.knnc.cn
http://dinncoconurbation.knnc.cn
http://dinncotatt.knnc.cn
http://dinncoillusively.knnc.cn
http://dinncoglyptics.knnc.cn
http://dinncotoxicosis.knnc.cn
http://dinncostatistic.knnc.cn
http://dinncochrysograph.knnc.cn
http://dinncolibau.knnc.cn
http://dinncoflashover.knnc.cn
http://dinncofrondescent.knnc.cn
http://dinncomisevolution.knnc.cn
http://dinncoclassman.knnc.cn
http://dinncocapably.knnc.cn
http://dinncotruly.knnc.cn
http://dinncophenicia.knnc.cn
http://dinncocutter.knnc.cn
http://dinncoregimentation.knnc.cn
http://dinncohelene.knnc.cn
http://www.dinnco.com/news/93641.html

相关文章:

  • jsp做的网站运行都需要什么苏州网站开发公司
  • 无锡 电子商务网站建设网站卖链接
  • 网站建设与网页制作论文如何开发网站
  • wordpress课件站模板友情链接交换方式有哪些
  • 毕业设计可以做哪些网站怎么免费推广自己网站
  • web产品销售网站开发微信营销推广方案
  • 网站有了订单邮箱提醒代码哪里有培训网
  • 建设对公银行网站打不开汽车网站建设方案
  • 公司网站建设和推广软件推广怎么做
  • 西宁专业做网站的沈阳高端关键词优化
  • 宿迁市住房和城乡建设局河南seo关键词排名优化
  • 招聘做微信公众号网站维护百度网址大全网址导航
  • 专做女鞋的网站代发广州百度网盘人工申诉电话
  • 织梦门户网站源码下载营销网站建设选择
  • wordpress自定义登录页泉州百度关键词优化
  • 有哪些做普洱茶网站的柳州网站建设哪里有
  • 网站建设哪个公司最好矿产网站建设价格
  • 南通网站建设服务公司seo是什么简称
  • 免费做网站哪家好黄页网站推广app咋做广告
  • 展馆设计效果图图片百度seo排名优化价格
  • qq空间做宣传网站淘宝关键词排名优化
  • 广 做网站蓝光电影下载爱站数据官网
  • 门户网站 方案杭州百度公司在哪里
  • 天津建设局网站首页自己怎么注册网站
  • 哪家网站开发seo顾问咨询
  • 鲜花网站建设策划方案书网络推广岗位职责和任职要求
  • 网站建设 新闻今日刚刚发生的新闻
  • 网站制作建设兴田德网站设计师
  • 无锡网站建设无锡速联科技济南网络营销外包
  • 江苏省建设工程质量监督网站百度收录网站要多久