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

北京seo网站创建外卖平台

北京seo网站,创建外卖平台,尚硅谷前端培训多少钱,省住房城乡建设厅门户网站前言 据上一篇#xff0c;设计方案的分析#xff0c;综合考虑#xff0c;最终决定,客户端采用agent方案实现#xff0c;具本原因不再赘述#xff0c; 感觉兴趣的小伙伴可以回头了解一下.该篇主要讲java agent的实现,灰度agent客户端的基础框架实现 java agent的介绍 ja…前言 据上一篇设计方案的分析综合考虑最终决定,客户端采用agent方案实现具本原因不再赘述 感觉兴趣的小伙伴可以回头了解一下.该篇主要讲java agent的实现,灰度agent客户端的基础框架实现 java agent的介绍 java Agent 是一种允许你在 Java 应用程序启动时或运行时修改其字节码的技术。 它通过 JVM 提供的 java.lang.instrument 包来实现可以用于各种用途 如性能监控、代码增强、AOP面向切面编程、日志记录等。 Java Agent 的核心功能是能够在类加载到 JVM 之前对其进行修改 而无需修改应用程序的源代码。启动时代理Premain Agent在 JVM 启动时加载的代理。你需要通过 -javaagent 参数指定代理的 JAR 文件路径并提供一个 premain 方法作为入口点。 public static void premain(String agentArgs, Instrumentation inst) {// 在这里注册 ClassFileTransformer 或执行其他初始化逻辑 }基础实现 agent的实现的基础是基于开源项目skywalking的插件核心实现没必要重复造轮子,要做的是专注 去实现灰度相关的功能. agent端 http服务实现 为了方便灰度管理端给agent端实时推送数据agent端基于netty实现单简的http服务 会提供接口供服务端对实例状态的控制以及其它服务实例状态的推送;实例在收发消息或路由时依赖这些信息作相应处理。 如果不太了解这块功能的作用可以去第一篇看一下整个系统的架构图;下需要agent http server代码片段 SimpleChannelInboundHandler agentServerHttpInboundHandler new AgentServerHttpInboundHandler(); agentChannelInitializer new AgentServerChannelInitializer(agentServerHttpInboundHandler); Thread serverThread new Thread(new RunnableWithExceptionProtection(() - {LOGGER.info(dbcat gray agent netty server.);ServerBootstrap serverBootstrap new ServerBootstrap();bossGroup new NioEventLoopGroup(1, new DefaultNamedThreadFactory(server-boss));workerGroup new NioEventLoopGroup(4, new DefaultNamedThreadFactory(server-worker));serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_REUSEADDR, true).option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT).childOption(ChannelOption.TCP_NODELAY, true).childOption(ChannelOption.SO_KEEPALIVE, true).childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT).childHandler(agentChannelInitializer);int port Config.Agent.SERVER_PORT;try {ChannelFuture f serverBootstrap.bind(port).sync();LOGGER.info(dbcat gray agent server started, port is {}., port);f.channel().closeFuture().sync();LOGGER.info(dbcat gray agent server closed, port is {}., port);} catch (InterruptedException e) {LOGGER.error(dbcat gray agent server start failed, e);Thread.currentThread().interrupt();} }, t - { }), gray-agent-server); serverThread.setDaemon(true); serverThread.start();agent端api接口 上面实现agent端的http服务灰度服务端如果需要控制agent客户端必需还要提供api接口才能进行交互 http 接口实现片段 public class AgentServerHttpInboundHandler extends SimpleChannelInboundHandlerFullHttpRequest {private static final ILog log LogManager.getLogger(AgentServerHttpInboundHandler.class);private static final Gson GSON new GsonBuilder().disableHtmlEscaping().create();Overridepublic void channelReadComplete(ChannelHandlerContext ctx) {ctx.flush();}Overrideprotected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest request) {//收到http请求QueryStringDecoder queryStringDecoder new QueryStringDecoder(request.uri());String requestUri queryStringDecoder.rawPath();String method request.method().name();if (!POST.equals(method.toUpperCase())) {complete(ctx, request, RestResult.buildFailure(HttpResponseStatus.METHOD_NOT_ALLOWED.toString(),HttpResponseStatus.METHOD_NOT_ALLOWED.code()));return;}//通过url配置接口对应用实现Endpoint endpoint EndpointManager.getEndpoint(requestUri);if (endpoint null) {complete(ctx, request, RestResult.buildFailure(HttpResponseStatus.NOT_FOUND.toString(),HttpResponseStatus.NOT_FOUND.code()));return;}Throwable throwable null;RestResult result null;try {ByteBuf content request.content();byte[] requestBodyBytes new byte[content.readableBytes()];content.readBytes(requestBodyBytes);String requestBodyString new String(requestBodyBytes, UTF-8);ParameterizedType parameterizedType ((ParameterizedType) endpoint.getClass().getGenericInterfaces()[0]);Type[] actualTypeArguments parameterizedType.getActualTypeArguments();Object data GSON.fromJson(requestBodyString,actualTypeArguments[0]);//调用相应的接口result endpoint.invoke(data);} catch (Throwable e) {log.error(String.format(接口响应异常%s, requestUri), e);throwable e;} finally {if (throwable null) {complete(ctx, request, result);} else {complete(ctx, request, RestResult.buildFailure(throwable.getMessage(),HttpResponseStatus.INTERNAL_SERVER_ERROR.code()));}}}}Endpoint api 接口类通过spi 方式加载实现 public class EndpointManager {private static final MapString, Endpoint ENDPOINT_INVOKER_MAP new HashMap();static {for (final Endpoint endpointInvoker : ServiceLoader.load(Endpoint.class, AgentClassLoader.getDefault())) {ENDPOINT_INVOKER_MAP.put(endpointInvoker.path(), endpointInvoker);}}public static Endpoint?, ? getEndpoint(String requestUri) {return ENDPOINT_INVOKER_MAP.get(requestUri);}}Endpoint 的实某个实现如更新实例状态接口 public class EnvStatusUpdateEndpoint implements EndpointInstanceEnvUpdateRequest, ListExecuteResponse {private static final ILog log LogManager.getLogger(EnvStatusUpdateEndpoint.class);Overridepublic String path() {return /env-status/update;}Overridepublic RestResultListExecuteResponse invoke(InstanceEnvUpdateRequest request) throws Exception {log.info(更新实例信息);ServerInstance.getInstance().setEnvStatus(request.getEnvStatus());ListExecuteResponse executeResponses MQConnectionManager.restartAll(request.getStrategy());return RestResult.buildSuccess(executeResponses);} }到此agent客户端的基础框加已实现下一篇将开始介绍相关核心组件灰度的增强实现 硬广 最后不要脸给大家安利一款mysql监控软件: 安装方便消耗低可视化傻瓜式操作可以监控慢日志详情、cpu、内存、连接数、tps 等信息 体验演示 下载地址
http://www.hkea.cn/news/14439743/

相关文章:

  • 凯里网站建设哪家专业wordpress多用户图库
  • wordpress页面不留边潍坊seo推广
  • 做网站选哪家江苏建筑培训网
  • 门户网站建设工作流程网站开发用到的编程
  • 建网站空间的详细说明品牌推广计划
  • 中信建设有限责任公司官方网站有什么做第二职业的网站吗
  • 网站编程语言排行榜企业网站做百度小程序
  • 广州网站建设平台邯郸网络运营中心电话
  • 东莞做网站公司在哪泉州seo优化排名公司
  • 住房和城乡建设部网站主页博乐建设工程信息网站
  • 网站建设前期策划方案学校网站建设的意义和目的
  • 做微信的微网站费用多少做网站横幅的图片多大
  • 购物网站哪个是正品网页传奇排名
  • 网站备案后打不开腾讯企业邮箱登录入口电脑版
  • 在国际网站做外贸需要条件做报名链接的网站
  • 南京网站开发价格phpcms模板行业网站
  • 表格模板网站永州网站开发
  • 阿里云建网站流程网站推广排名服务
  • 做计算机题目的网站在线生成小程序
  • 网站设计全包网页制作软件html
  • 临沂电商网站建设网页设计与网站建设实训报告
  • 研究生院 网站 建设番禺制作网站技术
  • 希尔顿酒店网站建设的优点制作灯笼的视频
  • 网站建设读书笔记seo搜索优化专员招聘
  • 北京公司响应式网站建设价位门户网站建设的平台搭建
  • 西安学建网站赣州网络
  • 网站建设需要域名关于备案空壳网站清理通知
  • 做外贸有必要做个网站吗十大营销策划公司排名
  • 网站建设文案详情手机网站设计建设服务
  • 有没有兼职做设计的网站淄博手机网站建设公司