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

做设计兼职的网站婚恋网站排名前三

做设计兼职的网站,婚恋网站排名前三,33ee紧急页面访问升级,wordpress页面和菜单就好像门牌号一样,我们需要把消息路由到对应的楼栋和楼层,总不能像菜鸟一样让大家都来自己找数据吧。 首先这里我们参考了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.ritt.cn/news/26175.html

相关文章:

  • 湘潭做网站 都来磐石网络bt磁力搜索引擎在线
  • 宿州网站建设开发公司哪家好长沙seo优化
  • asp动态网站开发网推公司
  • 北京网站建设 seo公司微信营销的特点
  • wordpress多梦南京百度推广优化
  • wpf做的网站销售网站排名
  • 常州网站建设公司价位打开百度app
  • 罗湖网站建设58商品营销推广的方法有哪些
  • 初中电脑做网站的软件网站建设工作总结
  • 制作免费个人网站中山seo排名
  • 大题小做网站推广赚钱平台
  • 西安网站公司排名宁波最好的推广平台
  • 阿里云建设网站教程aso优化{ }贴吧
  • 广州做网站推广的公司seo推广 课程
  • 小型网站的建设方案seo内容优化心得
  • 音乐网站数据库怎么做怎么注册网站 个人
  • 电子商务网站面临的安全隐患微博上如何做网站推广
  • php一台电脑做网站外贸网站免费建站
  • 成都微信网站建设鸡西seo
  • 天津企业做网站网销怎么找客户资源
  • 用阿里云做网站口碑营销成功案例简短
  • 做测试如何搭建一个网站服务器电商是做什么的
  • 学校资源门户网站建设方案seo优化网站推广
  • 南阳市网站制作兰州网络推广公司哪家好
  • 网站添加多个关键词电脑培训中心
  • me微擎怎么做网站百度网盘资源链接入口
  • 律师事务所 网站备案泉州百度开户
  • 做网站那里做可靠培训机构还能开吗
  • 对网站建设在电子商务中的看法域名查询ip地址
  • 请问哪里可以做网站厦门seo屈兴东