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

喀什市建设局网站查证件老干部局网站建设的意义

喀什市建设局网站查证件,老干部局网站建设的意义,wordpress的memcached,青岛市建设工程质量安全监督站官方网站就好像门牌号一样,我们需要把消息路由到对应的楼栋和楼层,总不能像菜鸟一样让大家都来自己找数据吧。 首先这里我们参考了rabbitmq中的topic与tag模型,topic对应类,tag对应方法。 新增一个模块,专门记录路由eternity-…

        就好像门牌号一样,我们需要把消息路由到对应的楼栋和楼层,总不能像菜鸟一样让大家都来自己找数据吧。

        首先这里我们参考了rabbitmq中的topic与tag模型,topic对应类,tag对应方法。

新增一个模块,专门记录路由eternity-command

ServerTag.java

public interface ServerTag {/**** 打招呼*/int TAG_HELLO_HI = 1;}

ServerTopic.java

public interface ServerTopic {/**** 问候*/int TOPIC_HELLO = 1;}

然后再core中引入这个模块,同时增加反射依赖

    <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.reflections</groupId><artifactId>reflections</artifactId><version>0.9.10</version></dependency><dependency><groupId>com.loveprogrammer</groupId><artifactId>eternity-common</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>com.loveprogrammer</groupId><artifactId>eternity-command</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>

在core中增加一个文件夹

创建两个注解:

TagListener

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.METHOD;@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TagListener {/*** 订阅的tag*/int tag() default 0;/*** 请求方消息类型*/Class<?> messageClass() default Object.class;}

TopicListener

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface TopicListener {/*** 订阅的主题*/int topic() default 0;
}

接口IHandler

public interface IHandler {}

抽象实现类BaseHandler

public abstract class BaseHandler implements IHandler{}

hello实现类


import com.loveprogrammer.base.network.command.BaseHandler;
import com.loveprogrammer.base.network.command.HandlerFactory;
import com.loveprogrammer.base.network.command.anotation.TagListener;
import com.loveprogrammer.base.network.command.anotation.TopicListener;
import com.loveprogrammer.command.server.ServerTag;
import com.loveprogrammer.command.server.ServerTopic;
import io.netty.channel.Channel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;/*** @ClassName HelloHandler* @Description 测试handler* @Author admin* @Date 2024/2/5 15:49* @Version 1.0*/
@Component
@TopicListener(topic = ServerTopic.TOPIC_HELLO)
public class HelloHandler extends BaseHandler {public static final Logger log = LoggerFactory.getLogger(HelloHandler.class);@TagListener(tag = ServerTag.TAG_HELLO_HI,messageClass = String.class)public void sayHi(Channel channel, String msg){log.info("say hi");}
}

创建监听器工厂 HandlerFactory


import com.loveprogrammer.base.network.command.anotation.TopicListener;
import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;import java.util.HashMap;
import java.util.Map;
import java.util.Set;/*** @ClassName HandlerFactory* @Description 监听器工厂* @Author admin* @Date 2024/2/5 11:21* @Version 1.0*/
@Component
public class HandlerFactory implements CommandLineRunner {public static final Logger log = LoggerFactory.getLogger(HandlerFactory.class);public Map<Integer, Class> handlerMap = new HashMap<>();@Overridepublic void run(String... args) throws Exception {// 找到所有实现类Reflections reflections = new Reflections("com.loveprogrammer.base.network.command.handler");// 获取在指定包扫描的目录所有的实现类Set<Class<? extends BaseHandler>> classes = reflections.getSubTypesOf(BaseHandler.class);for (Class<? extends IHandler > aClass : classes) {try {TopicListener listeners = aClass.getAnnotation(TopicListener.class);Integer topic = listeners.topic();handlerMap.put(topic, aClass);log.info("初始化消息监听器成功 {}",aClass.getName());} catch (Exception e) {log.error("初始化" + aClass.getName() + "消息监听器失败",e);}}}
}

启动server,查看监听器是否初始化成功。

2024-02-05 16:09:33.860  INFO 14144 --- [           main] c.l.base.network.command.HandlerFactory  : 初始化消息监听器成功 com.loveprogrammer.base.network.command.handler.HelloHandler
(♥◠‿◠)ノ゙  springboot启动成功   ლ(´ڡ`ლ)゙ 

上一篇:从零开始手写mmo游戏从框架到爆炸(五)— 集成springboot-CSDN博客

全部源码详见:

gitee : eternity-online: 多人在线mmo游戏 - Gitee.com

分支:step-06

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

相关文章:

  • 网站建设开发哪家质量好华为荣耀手机最新款
  • 二级建造师考试科目十堰优化网站公司
  • 商城网站网络公司做网站时尺寸多大
  • 衡水城乡建设局网站wordpress 导出评论
  • 宁波网站建设设计图网站制作方案书
  • 塑胶东莞网站建设技术支持wordpress密码修改
  • 龙岗公司的网站制作淘宝官网网页版淘宝网
  • 小型教育网站开发与设计三水建设局招标网站
  • 学做彩票网站有哪些百度做自己的网站
  • 导购网站怎么推广动漫制作专业软件有哪些
  • 如何在阿里云做网站北京网站建设手机号
  • 手机怎么做微电影网站网站如何排版
  • hao123网站模板网站 国外服务器
  • 做网站软件A开头的全flash网站模板
  • 网站制作视频教程全wordpress编辑器可视化调用
  • 做网站设计赚不赚钱海报设计手绘
  • 网站空间如何买网站热销榜怎么做
  • 网站服务器基本配置淘宝客网站开源
  • 岐山网站建设专业简历制作网站模板
  • 一般网站建设需要哪些东西邢台移动网站建设费用
  • 机械产品做那几个网站好世界杯竞猜
  • 直接进网站的浏览器打开omega欧米茄手表官网
  • 龙华网站建设多少钱中国容桂品牌网站建设
  • node.js做网站海南网站建设软件
  • 铜川微网站建设北京学校网站建设公司
  • 常州市建设工程管理中心网站大连网页制作培训
  • 枣庄网站制作费用德阳市做网站
  • 创建视频网站免费注册中企动力高端网站建设
  • 豪华大气的旅行社网站源码中国电信网上营业厅
  • 网站建设与管理是学什么安徽省住房城乡建设厅网站公示