• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

baffalotech: 一个基于Netty开发的服务容器,支持servlet,tcp,webservice,可以方便 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

baffalotech

开源软件地址:

https://gitee.com/9123/baffalotech

开源软件介绍:

BaffaloTech Integration

License Build Status Maven Central Dependencies Dependencies

简介

随着微服务的兴起,越来越多的项目采用微服务架构,而其中很大一部分是采用spring cloud全家桶实现。另外一方面,这些项目不同程度的是需要第三方系统的接入。这些对接方式可能80%以上都是基于http、webservice、tcp协议;安全认证方式也不尽相同。BaffaoTech Integration是基于Netty开发的、可以作为Spring Boot内嵌服务器的NIO高性能Servlet容器,可以和SpringCloud无缝集成。

特点

  1. 支持http,webservice,tcp协议
  2. 基于Spring Boot开发,原生支持Spring Boot所有的功能
  3. 容易集成Spring Cloud的组件,例如Eureka、配置中心、zipkin、ribbon等等
  4. http接口符合servlet规范,较低的学习成本
  5. 可以在一个jvm里面开放多个http,tcp端口,各个http端口可以使用不同的filter,servlet。
  6. 在同一个jvm里面可以发布不同的webservice
  7. 一个jvm默认开放一个http端口,和普通的spring boot内嵌容器一致
  8. 无处不在mvc框架,充分解耦业务逻辑和通用功能,让开发更加关注业务功能的开发
  9. 多种connector组件,有基于http、tcp的
  10. 所有的connector都很容易监控,按照tomcat的access log标准生成access log,方便监控接口性能
  11. 基于Netty NIO框架,所有的conector共享线程池,方便系统控制

平台架构

平台架构

与Mule比较

功能BaffaloTech IntegrationMule
协议支持http、webservice、TCP,其他的需要定制开发基本上有现成Connector的可以选择
社区支持暂时只有作者一人支持商业公司运作
IO类型NIOBIO
底层技术栈最新的Spring Boot比较老的Spring版本
Servlet支持服务Servlet规范使用http component解析http协议
集成SpringCloud原生支持需要改代码
学习成本基于Spring Boot,学习成本低学习成本相对较高
部署方式跟Spring Boot一致需要Mule服务器

使用

添加依赖

<dependency>  <groupId>com.baffalotech</groupId>  <artifactId>baffalotech-integration-http</artifactId>  <version>1.0.5</version></dependency>

启用集成容器,在启动类中添加EnableNettyServerContainer,会默认创建一个http connector

@EnableNettyServerContainer

默认的http端口使用方式跟普通的Spring Boot完全一样。

新增http端口:添加NettyServerConnector的Bean就可以了

@Autowiredprivate NettyHttpServerConnectorFactory nettyHttpServerConnectorFactory;.....@Beanpublic Connector createNettyHttpConnector(){	return nettyHttpServerConnectorFactory.createNettyHttpServerConnector("test",8081);}

给NettyServerConector添加Filter或者Servlet,需要给servlet或者Filter指定ConnectorName

@Bean()public ServletRegistrationBean cxfServlet() {	ServletRegistrationBean<Servlet> test = new ServletRegistrationBean(NettyProxyServlet.createNettyProxyServlet("test", new CXFServlet()), "/soap-api/*");	test.addInitParameter("bus", "testws");	test.setOrder(1121);	return test;}@Beanpublic FilterRegistrationBean tracerFilter(TracingFilter httpTraceFilter) {	FilterRegistrationBean<Filter> tracerFilterRegistrationBean = new FilterRegistrationBean<Filter>();	tracerFilterRegistrationBean.setFilter(NettyProxyFilter.createNettyProxyFilter("test", httpTraceFilter));	tracerFilterRegistrationBean.addUrlPatterns("/*");	tracerFilterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE+200);	return tracerFilterRegistrationBean;}

创建TCP Connector

 @Bean    public Connector createTCPConnector()    {    	TCPProtocal inTcpProtocal = new TCPProtocal();    	inTcpProtocal.addField(new FixedLengthField("name",null, 4));    	inTcpProtocal.addField(new LengthField("length",0, 4));    	return nettyTCPFixedLengthServerConnectorFactory.create("hbnx", 8082, inTcpProtocal, inTcpProtocal, new TCPRequestHanlder() {			@Override			public void handle(TCPRequest tcpRequest, TCPResponse tcpResponse) {				// TODO Auto-generated method stub				tcpResponse.setData((new Date()).toString().getBytes());			}		});    }

给TCPConnector添加Connector,例如一下代码给tcp添加Zipkin支持,具体需要参考Demo中的zipkin包

 @Bean    public TCPHandler tcpTracingHandler(HttpTracing httpTracing)    {    	TCPHandler tcpHandler = TCPTracingHandler.create(httpTracing);    	tcpHandler.setName("hbnx");    	return tcpHandler;    }

鸣谢

Netty对servlet的支持是来至于github的wangzihaogithub的工程:https://github.com/wangzihaogithub/netty-servlet


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap