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

}

結果:
正常訪問情況:
在這裏插入圖片描述
出錯情況
在這裏插入圖片描述

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