1 Star 0 Fork 2

方斌斌1990 / baffalotech

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 5.52 KB
一键复制 编辑 原始数据 按行查看 历史
chijinhuang 提交于 2019-08-16 13:07 . fff

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 Integration Mule
协议支持 http、webservice、TCP,其他的需要定制开发 基本上有现成Connector的可以选择
社区支持 暂时只有作者一人支持 商业公司运作
IO类型 NIO BIO
底层技术栈 最新的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就可以了

@Autowired
private NettyHttpServerConnectorFactory nettyHttpServerConnectorFactory;
.....
@Bean
public 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;
}


@Bean
public 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

Java
1
https://gitee.com/fangbinbin1990/baffalotech.git
git@gitee.com:fangbinbin1990/baffalotech.git
fangbinbin1990
baffalotech
baffalotech
master

搜索帮助