1. 程式人生 > >2、spring cloud服務註冊中心eureka---服務消費者(第二章)

2、spring cloud服務註冊中心eureka---服務消費者(第二章)

服務呼叫

1、pom包配置
和服務提供者一致

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion
>
<groupId>com.llx.springcloud</groupId> <artifactId>spring-cloud-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-cloud-consumer</name> <description>Demo spring-cloud-consumer</description
>
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <
project.build.sourceEncoding
>
UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.M1</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--<dependency>--> <!--<groupId>org.springframework.boot</groupId>--> <!--<artifactId>spring-boot-autoconfigure</artifactId>--> <!--</dependency>--> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project>

2、配置檔案
application.properties配置如下:

spring.application.name=spring-cloud-consumer
server.port=9091
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka/

3、啟動類
啟動類新增@EnableDiscoveryClient和@EnableFeignClients註解。

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {

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

}

@EnableDiscoveryClient :啟用服務註冊與發現
@EnableFeignClients:啟用feign進行遠端呼叫
Feign是一個宣告式Web Service客戶端。使用Feign能讓編寫Web Service客戶端更加簡單, 它的使用方法是定義一個介面,然後在上面添加註解,同時也支援JAX-RS標準的註解。Feign也支援可拔插式的編碼器和解碼器。Spring Cloud對Feign進行了封裝,使其支援了Spring MVC標準註解和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支援負載均衡。

4、feign呼叫實現

@FeignClient(name= "spring-cloud-producer")
public interface HelloRemote {
    @RequestMapping(value = "/hello")
    public String hello(@RequestParam(value = "name") String name);
}

name:遠端服務名,及spring.application.name配置的名稱
此類中的方法和遠端服務中contoller中的方法名和引數需保持一致。

5、web層呼叫遠端服務
將HelloRemote注入到controller層,像普通方法一樣去呼叫即可。

@RestController
public class ConsumerController {

    @Autowired
    HelloRemote HelloRemote;
	
    @RequestMapping("/hello/{name}")
    public String index(@PathVariable("name") String name) {
        return HelloRemote.hello(name);
    }

}

到此,最簡單的一個服務註冊與呼叫的例子就完成了。

####測試
簡單呼叫
依次啟動spring-cloud-eureka、spring-cloud-producer、spring-cloud-consumer三個專案

先輸入:http://localhost:9000/hello?name=llx 檢查spring-cloud-producer服務是否正常

返回:hello llx,this is first messge

說明spring-cloud-producer正常啟動,提供的服務也正常。

瀏覽器中輸入:http://localhost:9091/hello/llx

返回:hello llx,this is first messge

說明客戶端已經成功的通過feign呼叫了遠端服務hello,並且將結果返回到了瀏覽器。