.Springクラウドについて
簡単に言えば、春の雲は、現在の枠組みの中で、このようなマイクロサービスなどの分散システム、のセットにコミットしている非常に暑いです。それ自体がフレームの順序集合(複数のモジュール)のシリーズです。
ダボに比べて多くの違いが残っています。たとえばダボは、APIのRESTfulなRPCサービスフレームワークに基づいており、春のクラウドベースのサービスフレームワークです。ダボそれはバイナリのパスですが、春の雲はようにhttpプロトコルの輸送である、そしてので。
ユーレカの二つ.Springクラウドコンポーネント
1.Eurekaの役割
ユーレカと同様の飼育係は、サービスレジストリの役割を果たすことができます
2.ユーレカ
ユーレカメインクラスを開くには、注釈春ブーツを追加@EnableEurekaServer(ノートが関連する依存関係を導入する必要があり、以下の依存関係)
<依存性> <のgroupId> org.springframework.cloud </のgroupId> <たartifactId>ばねクラウドスタータのNetflix、ユーレカサーバ</たartifactId> </依存>
3.Eureka設定
次の設定application.propertiesで
春cloud- = spring.application.name ユーレカ はserver.port = 8060 eureka.instance.hostname = localhostを #サービスセンターがfalseに次のプロパティを表示しなければならない設定 eureka.client.registerWithEureka = falseを eureka.client.fetchRegistry = 偽 #アクセスパス eureka.client.serviceUrl.defaultZone = HTTP:// localhostを:8060 /ユーリカ/
4.テストサービス
春のブートプロジェクトを開始し、アクセスポートは、次のインターフェイスを見ることができます
5.サービスプロバイダ
プロジェクトの下に新しいモジュールのブート春のプロジェクトを作成し、メインカテゴリに注釈を追加@EnableEurekaClient
設定ファイルに以下の設定を追加
spring.application.name =春-cloud- プロバイダ はserver.port = 8061 eureka.client.serviceUrl.defaultZone =のhttp:// localhostを:8060 /ユーリカ/
サービスセンタープロジェクトを開始した後、サービスプロバイダより、以下に示すようにことがわかっ
6.消費者向けサービス
春の雲は、2つの方法、すなわち、リボンでサービスコンシューマを作成し、ふりを使用します
サービスの消費者1.Ribbonの道を作成します。
(1)最初の関連の依存関係を導入
<依存性> <のgroupId> org.springframework.cloud </のgroupId> <たartifactId>ばねクラウドスタータNetflixのリボン</たartifactId> </依存>
(2)主要なカテゴリーに注釈を追加@EnableDiscoveryClient
次のように(3)設定ファイルの最後に配置され
spring.application.name =春-cloud- 消費者 はserver.port = 8063 eureka.client.serviceUrl.defaultZone =のhttp:// localhostを:8060 /ユーリカ/
(4)サービスプロバイダにおける顧客サービスの呼び出し方法を
例えば、次のコードは、オブジェクトを作成し、オブジェクトのgetForObjectメソッドを呼び出しRestTemplate
サービス層
@Service
パブリッククラスMyServiceで{
@Autowired
プライベート; RestTemplate restTemplateを
公共の文字列のgetPort(){ //调用服务提供方的方法 restTemplate.getForObjectを返す( "のhttp://春-クラウドプロバイダ:のgetPort"、String.class )。 } }
コントローラ層
@RestController
パブリッククラスMyController {
@Autowired
プライベートたMyService myServiceという。
( "/のgetPort" @RequestMapping ) パブリック文字列のgetPortを(){ 戻り)(myService.getPortします。}}
次のように試験結果であります
あなたは負荷分散ポリシーを設定する必要がある場合は、サービスコンシューマクラスコンフィギュレーションを追加し、他のサービスプロバイダはできるポートを開くことができます
@Configuration
public class MyConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
2.Feign的方式创建服务消费者
(1)首先引入相关的依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
(2)然后在主类中添加 @EnableFeignClients 和 @EnableDiscoveryClient 注解,配置文件与Ribbon的方式类似
(3)服务消费者调用服务提供者中的方法
在service层中的代码如下
@FeignClient(value = "spring-cloud-provider")
public interface MyService {
@RequestMapping(value = "getPort" , method = RequestMethod.GET)
public String getPort();
}
在controller层中的代码如下
@RestController
public class MyController {
@Autowired
private MyService myService;
@RequestMapping(value = "getPort" , method = RequestMethod.GET)
public String getPort(){
return myService.getPort(); } }
由于Feign的方式本身包含有了Ribbon,也实现了负载均衡,面向接口编程,写起来思路更清晰方便,实际开发中应用更广
三.Spring Cloud 熔断器
1.Ribbon的方式添加熔断器
(1)导入相关的依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
(2)在主类中添加 @EnableHystrix 注解开启熔断器
(3)修改service层中的方法,在方法上添加 @HystrixCommand 注解,例如
@HystrixCommand(fallbackMethod = "getError")//如果getPort方法执行失败,会直接熔断该方法并执行getError方法(避免浏览器一直去加载) public String getPort(){ //调用服务提供方的方法 return restTemplate.getForObject("http://spring-cloud-provider:getPort",String.class); } public String getError(){ return String.format("获取失败"); }
2.Feign的方式添加熔断器
(1)Feign自带熔断器,但默认是关闭的,可以在application.properties中开启
feign.hystrix.enabled=true
(2)在service层的接口中添加熔断回调方法(在上面的代码的基础上,在@FeignClient 中添加熔断回调如下,如果出现熔断,则执行接口的实现类中的方法)
@FeignClient(value = "spring-cloud-provider",fallback = MyServiceImpl.class)//如果下面的方法执行失败,会熔断并去执行MyServiceImpl中的方法
(3)创建接口实现类,例如
@Component public class MyServiceImpl implements MyService { @Override public String getPort() { return String.format("获取失败"); } }
3熔断监控
如果需要监控熔断信息,可以做如下步骤
(1)导入相关依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
(2)在主类中添加注解 @EnableHystrixDashboard 开启熔断监控,启动项目,并访问/hystrix,页面如下
(3)添加配置类
@Configuration public class MyConfig { @Bean public ServletRegistrationBean getServlet(){ HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet(); ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet); registrationBean.setLoadOnStartup(1); registrationBean.addUrlMappings("/myhystrix"); registrationBean.setName("HystrixMetricsStreamServlet"); return registrationBean; } }
(4)在页面中输入路径即(ip+端口号+配置类中的addUrlMappings)可查看熔断信息,例如下图