dubbo+zookeeper+hystrix整合springBoot
詳細環境搭建可以看我前兩篇文章,此文只簡單介紹下融合Hystrix
傳送門:
dubbo+zookeeper環境搭建
dubbo+zookeeper整合springBoot
介紹下整合Hystrix後需要修改的地方
1、pom.xml
在Consumer和Producer兩個工程中的pom.xml文件都追加下面的依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
如果啓動項目有報錯(如下錯誤),很大原因是因爲上面引入的hystrix依賴版本和spring-boot的依賴版本不兼容(都找最新的版本即可)
java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:157)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:98)
at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(BootstrapApplicationListener.java:64)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)
at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:351)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:317)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234)
at com.waterlufei.ServiceAApplication.main(ServiceAApplication.java:12)
Process finished with exit code 1
2、ConsumerServiceImpl.java
package com.qing.zhao.dubbo.impl;
import com.alibaba.dubbo.config.annotation.Reference;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.qing.zhao.dubbo.service.IConsumerService;
import com.qing.zhao.dubbo.service.IProducerService;
import org.springframework.stereotype.Service;
@Service
public class ConsumerServiceImpl implements IConsumerService {
@Reference//dubbo的標籤,表示引用服務的提供者
IProducerService producerService;
@Override
@HystrixCommand(fallbackMethod = "error")//當調用的服務出錯時,則回調fallbackMethod中指定的error方法
public String sayHello(String params) {
return producerService.sayHello(params);
}
@Override
public String sayHi() {
return null;
}
/**
* 此方法就是容錯方法
* @param str
* @return
*/
public String error(String str){
return "我出錯了";
}
}
3、ConsumerApplication.java
package com.qing.zhao.dubbo;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@EnableDubbo//支持dubbo
@EnableHystrix//支持Hystrix
@SpringBootApplication
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
4、ProducerServiceImpl.java
package com.qing.zhao.dubbo.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.qing.zhao.dubbo.service.IProducerService;
import org.springframework.stereotype.Component;
@Service
@Component
public class ProducerServiceImpl implements IProducerService {
@Override
@HystrixCommand//該註解表示sayHello方法被Hystrix代理,如果該方法出現異常就可以發現並在調用方進行容錯
public String sayHello(String name) {
if (Math.random() >0.5){
throw new RuntimeException();
}
return "Hello:"+name;
}
}
5、SpringBootProducerApplication.java
package com.qing.zhao.dubbo;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
@EnableDubbo//支持dubbo
@EnableHystrix//支持Hystrix
@SpringBootApplication
public class SpringBootProducerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootProducerApplication.class, args);
}
}
結果:
正常訪問情況:
出錯情況