天天看点

在dropwizard中使用feign,使用hystrix前言

用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味。为了增强对外访问API的能力,需要引入open feign。这里简单在dropwizard中使用feign。

<a></a>

Dropwizard is a Java framework for developing ops-friendly, high-performance, RESTful web services.

<code>Dropwizard</code>使成熟、稳定的java生态系统更加简单、轻量(light-weight), 让你更专注于业务逻辑。

Dropwizard 为配置(configuration)、统计(application metrics)、日志(logging)、operational tools提供了开箱即用的能力。让您和您的团队能够在最短的时间内开发出具有生产环境的质量的Web服务。

DropWizard是由Yammer开发团队贡献的一个后台服务开发框架,其集成了Java生态系统中各个问题域中最优秀的组件,帮助开发者快速的打造一个Rest风格的后台服务。

对开发者来说,使用DropWizard有如下好处:

1、和Maven集成良好,也就是说和Gradle集成也很良好;

2、开发迅速,部署简单;

3、代码结构好,可读性高;

4、自动为服务提供OM框架;

5、让开发者自然的把一个应用拆分为一个个的小服务

DropWizard结构的Web服务组成

1、Configuration:用于设置该服务的配置,比方说在服务开放在哪个端口,数据库配置是怎样的等等。

2、Application(即Service):该服务的主入口,定义该服务使用哪个配置文件,开放哪些Resource,该服务需要哪些HealthCheck等等。

3、Resource:定义一个资源,包括如何获取该资源,对该资源做Get/Post/Delete/Query时,对应的各种业务逻辑。

4、Representation:定义了一个服务返回值对象,当服务返回该对象时,会自动的把该对象按属性值生成一个Json格式的字符串返回给服务调用者。

5、HealthCheck:在DropWizard为每个服务提供的OM框架中用到,通过它可以随时检测当前服务是否可用。

Web应用程序不能没有HTTP,所以Dropwizard使用Jetty HTTP库将一个令人难以置信的HTTP服务器直接嵌入到您的项目中。 Dropwizard项目不需要将应用程序交给一个复杂的应用程序服务器,而是一个<code>main</code>方法,它会自动连接一个HTTP服务器。将应用程序作为一个简单的过程运行,消除了Java在生产中的一些不好的东西(没有PermGen问题,没有应用程序服务器配置和维护,没有复杂的部署工具,没有类加载器(class loader)故障,没有隐藏的应用程序日志,没有尝试调整一个垃圾收集器来处理多个应用程序工作负载),并允许您使用所有现有的Unix进程管理工具。

吹完牛逼,开始干活。

依旧是maven项目,pom中添加dropwizard

dropwizard采用yaml作为配置文件,同时需要有个配置类对应yaml中的属性。

创建<code>config/dev.yml</code>

然后,新建对应的配置类<code>com.test.configuration.HelloWorldConfiguration</code>

下一步就是启动类:<code>com.test.application.HelloWorldApplication</code>

到此,配置基本完成,只需要添加接口<code>resource</code>就好。

对应于springmvc中conroller, dropwizard采用jersey,使用resourc作为接口类:<code>com.test.com.test.resource.HelloWorldResource</code>

这里的template没啥意思,官网用在这里就是为了彰显下读取配置文件的能力: 通过configuration类来操作配置属性。

另外,需要注意的是,resource并不能像Spring一样自动扫描,需要手动去<code>environment.jersey().register(resource);</code>。

启动前还需要配置fat jar,同Spring-boot一样,fat jar首选. 在pom配置:

接下来,打包:

然后,run jar:

浏览器访问<code>http://localhost:8080/hello-world?name=Ryan</code>

将得到:

至此,hello world完成。

Feign是一个网络请求客户端,简化了网络请求代码,使得我们可以采用更加友好的方式发送请求,并且管理请求。Feign采用注解驱动模板,所以目前只支持text-based apis.

首先,添加依赖:

Feign的配置主要有三个,一个是<code>isolation.thread</code>线程存活时间。一个是<code>connectTimeoutMillis</code>连接超时,一个是<code>readTimeoutMillis</code>。

本次测试将采用github的公共API,获取用户信息。首先配置线程存活时间。在dev.yml中添加:

然后是两个超时配置:

Dropwizard通过配置类和配置文件绑定的方式获取配置内容。因此,需要对应的在配置类中创建对应的字段。

com.test.configuration.modules.ConnectAndReadConfig

com.test.configuration.modules.GithubApiConfig

在com.test.configuration.HelloWorldConfiguration中添加:

然后在application中配置好hystrix的配置:

在HelloWorldApplication#run方法中

创建接口com.test.domain.connect.GithubConnector:

创建客户端com.test.domain.connect.GithubClient

最后,创建一个接口来测试下:

com.test.domain.resource.GithubResource

run main方法启动。访问<code>localhost:8080/github/users/Ryan-Miao</code>就可以得到我的github信息了:

至此,feign的简单集成就搞定了。

feign采用hystrix的配置的时候,grop key是baseUrl.上栗中,grop Key为<code>https://api.github.com</code>, commandKey为接口+方法和参数,上栗中为<code>GithubConnector#getUserProfile(String)</code>。因此,配置线程超时用了commandKey如上。如果要配置coreSize之类的,必须使用url做为group key了。

本文转自Ryan.Miao博客园博客,原文链接:http://www.cnblogs.com/woshimrf/p/dropwizard-feign.html,如需转载请自行联系原作者