基於spring-cloud的微服務(2) eureka服務提供方的注冊和消費方的消費


啟動Eureka注冊中心之后,服務提供方就可以注冊到Eureka上去(作為一個Eureka的客戶端)
我們使用IDEA提供的spring initializer來新建一個springcloud項目

填寫相關的包名等信息:

選擇web和Erureka Discorvery

填寫Gradle等相關信息完成創建

我們需要在啟動類里邊增加注解 @EnableDiscoveryClient 來標識這是一個Eureka客戶端
啟動類的代碼如下:

package com.jiaoyiping.springcloud.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {

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

創建一個我們用來真正提供服務的Controller(在本例中,我們假設從路徑中取到兩個int值,將他們的和用字符形式返回,代碼如下):

package com.jiaoyiping.springcloud.provider;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductionController {
    //簡單計算兩個數字的和,轉換為字符串返回
    @RequestMapping(value = "/add/{a}/{b}")
    public String add(@PathVariable("a") int a, @PathVariable("b") int b) {
        return (a + b) + "";
    }
}

修改應用的配置文件,指定服務的名稱,網卡信息和eureka等相關信息:配置文件如下:

spring:
  application:
    name: provider
  cloud:
    inetutils:
      preferred-networks: 192.168.1.
server:
  port: 8082
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8081/eureka
  instance:
    prefer-ip-address: true
    instance-id: 192.168.1.5:${server.port}

運行啟動類,可以在eureka的頁面上看到一個名為provider的服務已經注冊上去了:

服務的消費方:

服務的消費方也是和服務提供方一樣,也會到Eureka中去注冊,按照上邊的步驟,我們新建一個consumer項目,比前邊的provider多加上Feign的依賴

在啟動類上邊,多加兩個注解:

@EnableFeignClients
@EnableDiscoveryClient

啟動類的代碼如下:

package com.jiaoyiping.springcloud.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class ConsumerApplication {

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

新建一個ProductControllerRemote接口,作為FeignClient,里邊定義的方法和服務提供方的方法一致;

package com.jiaoyiping.springcloud.consumer;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "provider")
public interface ProductControllerRemote {
    @RequestMapping(value = "/add/{a}/{b}")
    String add(@PathVariable("a") int a, @PathVariable("b") int b);
}

@FeignClient注解的name,指的是注冊到eureka上的應用的名稱(在服務提供方的spring的配置文件里配置) 接口的方法映射到服務提供方的相應的方法上,只需要定義,不需要實現,Feign會自動調用服務提供方的相應的方法

使用@FeignClient注解的這個類,可以作為一個spring的bean,注入到需要的地方去,直接調用相應的方法即可

作為例子,我們在消費方新定義一個Controller,來調用ProductControllerRemote:

package com.jiaoyiping.springcloud.consumer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConsumerController {
    @Autowired
    private ProductControllerRemote productControllerRemote;

    @RequestMapping("/getresult/{a}/{b}")
    public String getResult(@PathVariable("a") int a, @PathVariable("b") int b) {
        return productControllerRemote.add(a, b);
    }
}

然后是消費方的配置文件,需要配置Eureka的地址和服務的端口等信息:

spring:
  application:
    name: cunsumer
  cloud:
    inetutils:
      preferred-networks: 192.168.1.
server:
  port: 8083
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8081/eureka/
  instance:
    prefer-ip-address: true
    instance-id: 192.168.1.5:${server.port}

啟動消費方的啟動類,可以看到,消費方也被注冊到Eureka中去了:

使用postman調用消費方對外提供的接口,我們可以看到,消費方調用了服務提供方提供的服務,正確的返回了結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM