springboot整合eureka,服務相互呼叫簡單示例

weixin_44971379發表於2020-05-31

eureka可作為微服務之間的註冊中心,服務提供者在註冊中心註冊自己的服務,包含ip地址,埠號,消費者在註冊中心訂閱需要消費的服務,以下做簡單示例

1:搭建Eureka註冊中心

引入Eureka依賴:

<!--@1:Spring Cloud 的 eureka-server 起步依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>

注意:springboot的版本要和springcloud的版本相對應,否則啟動報錯

進行屬性配置:

# 內嵌定時 tomcat 的埠
server.port=8762
# 設定該服務註冊中心的 hostname
eureka.instance.hostname=localhost
# 由於我們目前建立的應用是一個服務註冊中心,而不是普通的應用,預設情況下,這個應用會向注
#冊中心(也是它自己)註冊它自己,設定為 false 表示禁止這種自己向自己註冊的預設行為
eureka.client.register-with-eureka=false
# 表示不去檢索其他的服務,因為服務註冊中心本身的職責就是維護服務例項,它不需要去檢索其他
#服務
eureka.client.fetch-registry=false
# 指定服務註冊中心的位置
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka

在服務入口處開啟eureka服務端(註冊中心):@EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer//enreka服務端註冊中心開啟
public class SpringcloudEurakeApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudEurakeApplication.class, args);
    }

}

啟動服務:可在後臺檢視分中心掛載的服務資訊

http://localhost:8762/

在這裡插入圖片描述

2:提供者註冊服務

引入eureka客戶端依賴:

<!--SpringCloud 整合 eureka 客戶端的起步依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>

配置配置檔案屬性:

#註冊到服務中心
eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/

執行入口處加入註解:

@SpringBootApplication
@MapperScan(basePackages = "com.qingnian.spring.dao")
@EnableSwagger2
@EnableEurekaClient//開啟客戶端註冊
public class SpringbootRedisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootRedisApplication.class, args);
    }
}

啟動之後可以看到服務的掛載:
在這裡插入圖片描述

3:註冊消費者服務,實現對提供者的呼叫

引入pom依賴:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--feign外部呼叫依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>
<!--Spring Cloud 熔斷器起步依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.5.RELEASE</version>
</dependency>

配置檔案配置:

server.port=8083

#註冊到服務中心
eureka.client.service-url.defaultZone=http://127.0.0.1:8762/eureka/

#開啟服務熔斷
feign.hystrix.enabled=true

主執行類註解開啟:

@SpringBootApplication
@EnableFeignClients //開啟 Spring Cloud Feign的支援功能
@EnableEurekaClient//開啟客戶端註冊
public class SpringcloudFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringcloudFeignApplication.class, args);
    }

}

使用feign進行服務之間的呼叫:fallback表示回撥類,當程式碼出錯時,自動調取回撥類對應繼承的該方法的邏輯

@FeignClient(name="sprinboot-redis",fallback = FallBack.class)
public interface StudentService {

    @RequestMapping("/swagger/get/all")
    public String getAllInfo();
}

回撥類:也需要實現feign介面

@Component
public class FallBack implements StudentService {
    @Override
    public String getAllInfo() {
        return "調取失敗,進行服務降級";
    }
}

控制層可以直接調取feign暴露的介面:

@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping("allStudent")
    public String getAllStudent(){
        return studentService.getAllInfo();
    }
}

這樣就可以實現服務之間的相互呼叫

相關文章