1.创建消费者:配置pom
<parent>
<groupId>com.cc</groupId>
<artifactId>spring-cloud-matser</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>spring-cloud-01-eureka-consumer</artifactId>
<name>spring-cloud-01-eureka-provider</name>
<description>spring-cloud-01-eureka-consumer</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 标示这个工程是一个服务,需要引入此jar -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- 动态刷新的一个模块jar -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Edgware.SR4</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>spring-cloud-01-eureka-consumer</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.cc.springcloud.Application</mainClass>
</configuration>
</plugin>
</plugins>
</build>
2.配置application.properties
spring.application.name=consumer-service
##微服务方式尽量不要加server.context-path,只用名字加方法实现
#server.context-path=/consumer
server.port=7002
##需要引入eureka注册中心的地址
##下面两条配置代表注册到注册中心后显示自己的IP地址,实际工作中尽量加上
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.application.name}:${spring.cloud.client.ipAddress}:${server.port}
##租期到期时间间隔
#eureka.instance.lease-expiration-duration-in-seconds=30
##租期更新时间间隔
#eureka.instance.lease-renewal-interval-in-seconds=10
##开启健康检查,必须要引入spring-boot-starter-actuator动态刷新jar
eureka.client.healthcheck.enabled=true
eureka.client.service-url.defaultZone=http://eureka1:8001/eureka
3.构建Controller:
package com.cc.springcloud.api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="/getByUrl")
public String getByUrl() {
//需要创建一个普通的RestTemplate
RestTemplate rt1 = new RestTemplate();
//基于http的服务之间调用,并没有依赖于service,注册中心的目的是要基于service依赖调用
ResponseEntity<String> responseEntity = rt1.getForEntity("http://localhost:7001/index", String.class);
String ret = responseEntity.getBody();
System.out.println("返回provider服务调用结果"+ret);
return "---------get by getByUrl----------";
}
/**
* 下面的getByServiceName() 获取不的provider-service服务,
* 原因在于:普通的RestTemplate并不具备服务发现功能;
* 需要在RestTemplate创建的时候添加@LoadBalanced注解
*/
@RequestMapping(value="/getByServiceName")
public String getByServiceName() {
ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://provider-service/index", String.class);
String ret = responseEntity.getBody();
System.out.println("返回provider服务调用结果"+ret);
return "---------get by service name----------";
}
}
4.构建Application:
package com.cc.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@EnableDiscoveryClient //标示是一个具体的服务,需要向注册中心注册
@SpringBootApplication //springboot 核心配置
@EnableAutoConfiguration //应用RestTemplate必须要加
public class Application {
//springcloud新版本需要new一个RestTemplate,才能在ConsumerController中注入成功,否则异常找不到类
@Bean
@LoadBalanced //负载均衡机制
/**
* 加入@LoadBalanced后getByUrl()方法将失效,
* 原因在于注释启动了微服务特性服务发现,会将方法中的url地址当成服务名称,所有找不到,
* 所以getByUrl()方法需要自己创建一个普通的RestTemplate;
*
* 服务发现的内部机制是LoadBalanced拉取服务列表,
* 然后在和请求做匹配,最后完成服务发现功能;
*/
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5.启动server、provider、consumer: