1:创建父项目。导入依赖
<!--指定jdk版本--> <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>Finchley.SR1</spring-cloud.version> <springboot.version>2.0.5.RELEASE</springboot.version> </properties> <!--由于springcloud是治理工具包,其版本要springboot项目版本一致 下方指定--> <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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${springboot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2:创建
user-counsom 当消费者子项目 导入web依赖和eureak客户端
<!--导入springboot启动的web依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--导入eureak的客户端--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
2.1 在子项目中配置application.yml
server: port: 8081 eureka: client: service-url: defaultZone: http://eureka1:1020/eureka,http://eureka2:1030/eureka,http://eureka3:1040/eureka #告诉服务提供者要把服务注册到哪儿 instance: prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称 ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找 spring: application: name: user-counsom
2.2向springboot项目中加载
RestTemplate对象package cn.itsource.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; @Configuration public class RestTemplateWangLu { @Bean public RestTemplate GetRestTemplate(){ System.out.println("自动执行向容器中发请求的对象"); return new RestTemplate(); } }
2.3测试的controller
package cn.itsource.controller; import cn.itsource.domain.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import java.net.URI; import java.util.List; @RestController @RequestMapping("/customer") public class CustomerController { @Autowired private RestTemplate restTemplate; /** * 导入客户端 */ @Autowired private DiscoveryClient discoveryClient; @RequestMapping("/user/{id}") public User getAll(@PathVariable("id") Integer id){ // String url ="http://localhost:8082/provider/user/"+id; // User user = restTemplate.getForObject(url, User.class); //因为可能集群了多个服务,需要先通过名字拉取 List<ServiceInstance> instances = discoveryClient.getInstances("user-provider"); ServiceInstance instance = instances.get(0); URI uri = instance.getUri(); String url = uri+"/provider/user/11222"; System.out.println(url); User user = restTemplate.getForObject(url, User.class); return user; } }
3.1写提供者的yml配置
server: port: 8082 eureka: client: service-url: defaultZone: http://eureka1:1020/eureka,http://eureka2:1030/eureka,http://eureka3:1040/eureka #告诉服务提供者要把服务注册到哪儿 instance: prefer-ip-address: true # 当调用getHostname获取实例的hostname时,返回ip而不是host名称 ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的话会自己寻找 spring: application: name: user-provider
controller
package cn.itsource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient//声明这个是spingcloud的客户端 public class ProviderApp { public static void main(String[] args) { SpringApplication.run(ProviderApp.class); } }
启动app:
package cn.itsource;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient//声明这个是spingcloud的客户端
public class ProviderApp {
public static void main(String[] args) {
SpringApplication.run(ProviderApp.class);
}
}
eureak服务端配置 这里集群了3个
--------------------------------------------------yml配置 ----------------------------------
server: port: 1020 eureka: instance: hostname: eureka1 client: registerWithEureka: false #是否要注册到eureka fetchRegistry: false #表示是否从Eureka Server获取注册信息 serviceUrl: defaultZone: http://eureka1:1020/eureka,http://eureka2:1030/eureka,http://eureka3:1040/eureka spring: application: name: eureka1--------------------------------------------------yml配置 ----------------------------------
server: port: 1030 eureka: instance: hostname: eureka2 client: registerWithEureka: false #是否要注册到eureka fetchRegistry: false #表示是否从Eureka Server获取注册信息 serviceUrl: defaultZone: http://eureka1:1020/eureka,http://eureka2:1030/eureka,http://eureka3:1040/eureka spring: application: name: eureka2-----------------------------------yml--------------------------------------
server: port: 1040 eureka: instance: hostname: eureka3 client: registerWithEureka: false #是否要注册到eureka fetchRegistry: false #表示是否从Eureka Server获取注册信息 serviceUrl: defaultZone: http://eureka1:1020/eureka,http://eureka2:1030/eureka,http://eureka3:1040/eureka spring: application: name: eureka3------------------------注册那个一个---------------
#当前激活的eureak服务器spring: spring: profiles: active: eureka3
eureka3为启动的名字
com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server。请检出现此错误,请修改yml文件名字