dubbo+zookeeper+hystrix整合springBoot

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);
	}

}

结果:
正常访问情况:
在这里插入图片描述
出错情况
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章