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);
}
}
结果:
正常访问情况:
出错情况