Jersey +jetty 实现微服务(一)
微服务:
传输协议基本都是http,数据序列化,协议层目前protocol buffer,Json, xml,Java序列化,最多使用Json。实现以上二点并不难,spring 就可以,但spring 的初衷是为了搞一套简化web开发,微服务最大特点,快速开发,持续交付,快速部署,
Jersey+Jetty ,正是符合这个特点。
Jersey:
Jersey RESTful 框架是开源的RESTful框架, 实现了 JAX-RS 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。
@Path("/base")
public class BaseServer {
@Path("/add")
@GET
@Produces(MediaType.TEXT_PLAIN)
@Override
public String add(@QueryParam("x") int x, @QueryParam("y") int y) {
return "" + (x + y);
}
}
Jetty:
Jetty 是一个开源的servlet容器,项目可以不用打成war包,可以使用jetty这样嵌入式的serlvet容器,它比tomcat更轻量 Jetty9支持最新NIO,不再支持BIO
Jetty Server两个重要的概念一个是Handler,一个是Connector。嵌入一个jetty服务一般会有下面几步,创建Server,加载Connectors,加载handlers,加载Servlets等,启动服务start,最后加入服务器join。
一个Jetty Server可以看成由一下几部分组成,其中Connector负责接收客户端的HTTP请求,请求的处理是由Handler来完成的。
Handler在Jetty中是一个非常重要的东西,Jetty内部实现了一些Handler,可以分为一下几类:
1.协调Handler:负责将request路由到其他Handler的Handler(如:HandlerConnection, ContextHandlerConnection)
2.过滤Handler:负责向request中设置一些参数,然后再把请求转交给其他Handler(如:HandlerWapper, ContextHandler, SessionHandler)
3.生成Handler:负责生成响应的内容(如:ResourceHandler, ServletHandler)
HandlerWrapper,AbstractHandler Server类就是实现HandlerWrapper,其它一些自定Handler通过继承AbstractHandler实现

public class HelloHandler extends AbstractHandler {
public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html;charset=utf-8");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
response.getWriter().println("<h1>Hello World1</h1>");
response.getWriter().println("Request url: " + target);
}
public static void main(String[] args) throws Exception {
Server server = new Server();
ServerConnector serverConnector = new ServerConnector(server);
serverConnector.setPort(8031);
//ServletContextHandler servletContextHandler = new ServletContextHandler();
server.setHandler(new HelloHandler());
server.addConnector(serverConnector);
//servletContextHandler.addServlet(new ServletHolder(new HelloHandler()),"/hello");
server.start();
server.join();
}
}
ServerConnector 是Jetty 9 提供NIO方式
Jsery+Jetty如何接合
jsery中有一个类ServletContainer,它直接从HttpServlet继承而来,直接插入Jetty ServletContextHandler.addServlet方法中。ServletContainer构造方法会要求注入一个实现Application类,这个类用来扫描包,它service方法拦截了全部请求,并把它转向Jsery对应类方法中
private static final ResourceConfig resourceConfig = new MyResourceConfig("com.test");
public static void main(String[] args) throws Exception {
Server server = new Server();
ServerConnector serverConnector = new ServerConnector(server);
serverConnector.setPort(8012);
ServletContextHandler servletContextHandler = new ServletContextHandler();
ServletContainer servletContainer = new ServletContainer(resourceConfig);
server.addConnector(serverConnector);
servletContextHandler.addServlet(new ServletHolder(servletContainer),"/*");
server.setHandler(servletContextHandler);
server.start();
server.join();
}
@Path("/add")
@GET
@Produces(MediaType.TEXT_PLAIN)
public String add(@QueryParam("x") int x, @QueryParam("y") int y) {
return "" + (x + y);
}
包扫描方式 使用jersey 注解包扫描类PackageNamesScanner
Jersey +jetty 实现微服务(一)的更多相关文章
- 简单聊聊SOA和微服务
转自:https://juejin.im/post/592f87feb123db0064e5ef7c (2017-06) 简单聊聊SOA和微服务 架构设计中的朴素主义 前两天和一个朋友聊天,他向我咨 ...
- 用Jetty 9.1运行Java WebSockets微服务
Jetty 9.1的发布将Java WebSockets (JSR-356) 带入了非Java EE环境,从而开启了微服务时代.我们可以将Jetty的容器包含在java应用程序中(注意,不是Java代 ...
- Java微服务框架一览
引言:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架. 微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大.更复杂的应用程序,而这 ...
- Re:从0开始的微服务架构--(二)快速快速体验微服务架构?--转
原文地址:https://mp.weixin.qq.com/s/QO1QDQWnjHZp8EvGDrxZvw 这是专题的第二篇文章,看看如何搭建一个简单模式的微服务架构. 记得好久之前看到一个大牛说过 ...
- 基于thrift的微服务框架
前一阵开源过一个基于spring-boot的rest微服务框架,今天再来一篇基于thrift的微服务加框,thrift是啥就不多了,大家自行百度或参考我之前介绍thrift的文章, thrift不仅支 ...
- 【原创】Docker容器及Spring Boot微服务应用
Docker容器及Spring Boot微服务应用 1 什么是Docker 1.1 Docker的出现 问题一:项目实施环境复杂问题 传统项目实施过程中经常会出现“程序在我这跑得好好的,在你那怎么就不 ...
- Chris Richardson微服务翻译:微服务介绍
作者简介:Chris Richardson,世界著名的软件架构师,经典著作<POJOS IN ACTION>的作者,cloudfoundry.com 的创始人 微服务目前正受到大量的关注, ...
- 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
- 部署:持续集成(CI)与持续交付(CD)——《微服务设计》读书笔记
系列文章目录: <微服务设计>读书笔记大纲 一.CI(Continuous Integration)简介 CI规则1:尽量频繁地把代码签入到分支中以进行集成 CI规则2: ...
随机推荐
- IPv6启动五年后,距离我们究竟还有多远?
作者:RicardoIPv6拥有更好的IP拓展性,更高的安全保障以及更快的传输速度,互联网协会将2012年6月6日定为了世界IPv6启动日,距此5年后,国内外Cloudflare.又拍云等CDN服务已 ...
- PHP 获取系统信息,PHP 获取服务器详细信息
获取系统类型及版本号: php_uname() (例:Windows NT COMPUTER 5.1 build 2600)只 ...
- NodeMCU入门(4):搭建Web服务器,配置网络连接
准备工作 1.NodeMCU模块 2.ESPlorer v0.2.0-rc6 3.NodeMCU-HTTP-Server 搭建web服务器 下载https://github.com/wangzexi/ ...
- Spring学习(21)--- AOP之Advice应用(上)
前置通知(Before advice) 在某个连接点(join point)之前执行的通知,但不能阻止连接点前的执行(除非它抛出异常) 返回后通知(After returning advice) 在某 ...
- C语言和go语言之间的交互
一.go代码中使用C代码 go代码中使用C代码,在go语言的函数块中,以注释的方式写入C代码,然后紧跟import "C" 即可在go代码中使用C函数 代码示例: go代码:tes ...
- .Net Core 图片文件上传下载
当下.Net Core项目可是如雨后春笋一般发展起来,作为.Net大军中的一员,我热忱地拥抱了.Net Core并且积极使用其进行业务的开发,我们先介绍下.Net Core项目下实现文件上传下载接口. ...
- C#开发移动应用系列(2.使用WebView搭建WebApp应用)
前言 上篇文章地址:C#开发移动应用系列(1.环境搭建) 嗯..一周了 本来打算2天一更的 - - ,结果 出差了..请各位原谅.. 今天我们来讲一下使用WebView搭建WebApp应用. 说明一下 ...
- Vue2 全家桶仿 微信App 项目,支持多人在线聊天和机器人聊天
前言 这个项目是利用工作之余写的一个模仿微信app的单页面应用,整个项目包含27个页面,涉及实时群聊,机器人聊天,同学录,朋友圈等等,后续页面还是开发中.写这个项目主要目的是练习和熟悉vue和vuex ...
- cookie 与 session
cookie简介 Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据.一般情况下,Cookie通过HTTP headers从服务端返回到客户端.多数web程序都支持Co ...
- 支付宝即时到账DEMO配置与使用
支付宝网页即时到账功能,可让用户在线向开发者的支付宝账号支付资金,交易资金即时到账,帮助开发者快速回笼资金. 当用户进行支付操作时候可以直接跳转到支付宝支付页面进行支付 1. 准备 关于支付宝签约即时 ...