天天看點

在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,如需轉載請自行聯系原作者