日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hystrix简介– Hello World

發(fā)布時(shí)間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hystrix简介– Hello World 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在先前的博客文章中,我談到了需要像Netflix Hystrix這樣的庫的動(dòng)機(jī)。 在這里,我將跳入一些非常基本的方法來開始使用Hystrix,并在更復(fù)雜的用例中進(jìn)行后續(xù)介紹。

你好,世界

以下是“ Hystrix命令”的一個(gè)簡單的Hello World示例:

import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandGroupKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class HelloWorldCommand extends HystrixCommand<String> {private static final Logger logger = LoggerFactory.getLogger(HelloWorldCommand.class);private final String name;public HelloWorldCommand(String name) {super(HystrixCommandGroupKey.Factory.asKey("default"));this.name = name;}@Overrideprotected String run() throws Exception {logger.info("HelloWorld Command Invoked");return "Hello " + name;} }

run方法保存了我們要保護(hù)的所有依賴活動(dòng),該活動(dòng)最終返回此特定實(shí)例中的參數(shù)化類型– String。 如果您是Netflix Rx-java庫的粉絲,那么創(chuàng)建Hystrix命令的另一種方法如下:

import com.netflix.hystrix.HystrixCommandGroupKey; import com.netflix.hystrix.HystrixObservableCommand; import rx.Observable;public class HelloWorldObservableCommand extends HystrixObservableCommand<String> {private String name;public HelloWorldObservableCommand(String name) {super(HystrixCommandGroupKey.Factory.asKey("default"));this.name = name;}@Overrideprotected Observable<String> resumeWithFallback() {return Observable.just("Returning a Fallback");}@Overrideprotected Observable<String> construct() {return Observable.just("Hello " + this.name);} }

在這里,“ construct”方法返回Rx-java Observable 。

使用Hystrix命令

現(xiàn)在我們有了一個(gè)Hystrix命令來包裝我們的調(diào)用,它可以用很多不同的方式使用,讓我們從最簡單的同步調(diào)用開始–

HelloWorldCommand helloWorldCommand = new HelloWorldCommand("World"); assertEquals("Hello World", helloWorldCommand.execute());

或者,可以使它返回Future:

HelloWorldCommand helloWorldCommand = new HelloWorldCommand("World"); Future future = helloWorldCommand.queue(); assertEquals("Hello World", future.get());

或者,甚至可以使它返回Rx-Java可觀察的:

HelloWorldCommand helloWorldCommand = new HelloWorldCommand("World");CountDownLatch l = new CountDownLatch(1);Observable<String> obs = helloWorldCommand.observe(); obs.subscribe(s -> logger.info("Received : " + s),t -> logger.error(t.getMessage(), t),() -> l.countDown() ); l.await(5, TimeUnit.SECONDS);

該命令的Observable變體也沿相同的方向工作,但是我們應(yīng)該對比一下小的行為差異:

HelloWorldObservableCommand helloWorldCommand = new HelloWorldObservableCommand("World"); logger.info("Completed executing HelloWorld Command"); Observable<String> obs = helloWorldCommand.observe();

這里有兩種獲取Observable的方法,一種是通過調(diào)用“ .observe()”的方法,另一種是以下方法:

HelloWorldObservableCommand helloWorldCommand = new HelloWorldObservableCommand("World"); Observable<String> obs = helloWorldCommand.toObservable();

另一個(gè)是以下使用“ .toObservable()”調(diào)用的內(nèi)容:

HelloWorldObservableCommand helloWorldCommand = new HelloWorldObservableCommand("World"); Observable<String> obs = helloWorldCommand.toObservable();

區(qū)別在于,“。observe()”方法返回的是Hot Observable,可立即開始執(zhí)行“ construct”方法,而“ .toObservable”的變體將返回“ Cold Observable”,除非已預(yù)訂,否則不會(huì)調(diào)用“ construct”方法,請按以下方式說:

CountDownLatch l = new CountDownLatch(1); obs.subscribe(System.out::println, t -> l.countDown(), () -> l.countDown()); l.await();

我在這里有更多信息。

請注意,盡管Hystrix Command不是Singleton,但使用Hystrix Command的典型方法是在需要的地方構(gòu)造它,并在完成后將其處置。

后備和命令組密鑰

在HelloWorldCommand的構(gòu)造函數(shù)中,我調(diào)用了具有以下簽名的超類構(gòu)造函數(shù)方法:

public HelloWorldCommand(String name) {super(HystrixCommandGroupKey.Factory.asKey("default"));this.name = name; }

該參數(shù)指定一個(gè)Hystrix“命令組”鍵,以及默認(rèn)情況下是類的簡單名稱的Command Key,它控制著Hystrix行為的許多細(xì)節(jié),下面是屬性示例,我將稍后再回到這些細(xì)節(jié):

hystrix.command.HelloWorldCommand.metrics.rollingStats.timeInMilliseconds=10000 hystrix.command.HelloWorldCommand.execution.isolation.strategy=THREAD hystrix.command.HelloWorldCommand.execution.isolation.thread.timeoutInMilliseconds=1000 hystrix.command.HelloWorldCommand.execution.isolation.semaphore.maxConcurrentRequests=10 hystrix.command.HelloWorldCommand.circuitBreaker.errorThresholdPercentage=50 hystrix.command.HelloWorldCommand.circuitBreaker.requestVolumeThreshold=20 hystrix.command.HelloWorldCommand.circuitBreaker.sleepWindowInMilliseconds=5000hystrix.threadpool.default.coreSize=10 hystrix.threadpool.default.queueSizeRejectionThreshold=5

我們可能要控制的另一種行為是在對依賴服務(wù)的調(diào)用失敗的情況下的響應(yīng),后備方法提供了這種行為,因此請考慮依賴服務(wù)始終失敗的情況:

import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandGroupKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class FallbackCommand extends HystrixCommand<String> {private static final String COMMAND_GROUP="default";private static final Logger logger = LoggerFactory.getLogger(FallbackCommand.class);public FallbackCommand() {super(HystrixCommandGroupKey.Factory.asKey(COMMAND_GROUP));}@Overrideprotected String run() throws Exception {throw new RuntimeException("Always fail");}@Overrideprotected String getFallback() {logger.info("About to fallback");return "Falling back";} }

在這里,從屬服務(wù)調(diào)用始終失敗,并且以下測試中所示的響應(yīng)將始終是fallback方法的響應(yīng):

FallbackCommand fallbackCommand = new FallbackCommand(); assertEquals("Falling back", fallbackCommand.execute());

監(jiān)控方式

在總結(jié)基礎(chǔ)之前,最好先演示一下Hystrix在Hystrix流和Hystrix儀表板方面的出色功能。 讓我們從Hystrix流開始,如果通常在基于Java的Web應(yīng)用程序中將其作為servlet啟用,它會(huì)提供SSE實(shí)時(shí)統(tǒng)計(jì)流,有關(guān)Web應(yīng)用程序中存在的Hystrix命令的行為。

由于我的演示基于基于Karyon2 Rx-Netty的應(yīng)用程序,因此可以在此處查看我的配置。 Hystrix流中的信息有點(diǎn)太原始了,這是很棒的Hystrix儀表板所適合的地方–它使用Hystrix流,并顯示有關(guān)每個(gè)Hystrix命令和不同底層線程池如何執(zhí)行的實(shí)時(shí)匯總信息。 我這里有一個(gè)基于很棒的Spring-Cloud項(xiàng)目的示例Hystrix儀表板項(xiàng)目。 此處是一個(gè)示例儀表板:

結(jié)論

這涵蓋了Hystrix的基礎(chǔ)知識(shí),還有很多工作要做,我將在下一篇博客文章中總結(jié)這些內(nèi)容,其中包含一些高級(jí)Hystrix功能的詳細(xì)信息。

翻譯自: https://www.javacodegeeks.com/2015/10/gentle-introduction-to-hystrix-hello-world.html

總結(jié)

以上是生活随笔為你收集整理的Hystrix简介– Hello World的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。