eureka 服务已经启动 http://localhost:8761/
注: 在启动文件加上 注解
1@EnableEurekaServer application.yml 配置文件 2 3eureka: 4 instance: 5 hostname: localhost 6 client: 7 service-url: 8 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 相互注册实现高可用 9 register-with-eureka: false # true 将自己注册到eureka 10 fetch-registry: false 11 server: 12 enable-self-preservation: false 13spring: 14 application: 15 name: eureka # 服务名称,注册之后的名称 16server: 17 port: 8761
clienta 服务注册eureka
启动文件加入注解:
1@EnableEurekaClient 2 3application.yml 配置文件 端口8000 4 5eureka: 6 client: 7 service-url: 8 defaultZone: http://localhost:8761/eureka/ #,http://localhost:8762/eureka/,http://localhost:8763/eureka/ 9# instance: 10# hostname: clientName 11spring: 12 application: 13 name: clienta 14 15@RestController 16public class TestController { 17 @GetMapping("/msg") 18 public String msg() { 19 return "this is clienta msg!!!"; 20 } 21}
访问 http://localhost:8000/msg 能返回结果
client 服务注册eureka 同clienta
在clien中调用clienta中方法
第一种方法:
1@RestController 2public class HelloController { 3 4 5 @Autowired 6 LoadBalancerClient loadBalancerClient; 7 8 @GetMapping("/test") 9 public String test() { 10 // 获取服务实例 11 ServiceInstance serviceInstance = loadBalancerClient.choose("CLIENTA"); 12 // 根据实例获取host port 13 String host = serviceInstance.getHost(); 14 int port = serviceInstance.getPort(); 15 // 拼接url 16 String url = String.format("http://%s:%s%s", host, port, "/msg"); 17 RestTemplate restTemplate = new RestTemplate(); 18 String res = restTemplate.getForObject(url, String.class); 19 return res; 20 } 21}
第二种: 配置config
1@Component 2public class RestTemplateConfig { 3 4 @Bean 5 @LoadBalanced 6 public RestTemplate restTemplate() { 7 return new RestTemplate(); 8 } 9} 10 11@RestController 12public class HelloController { 13 14 @Autowired 15 private RestTemplate restTemplate; 16 @GetMapping("/test") 17 public String test() { 18 String res = restTemplate.getForObject("http://CLIENTA/msg", String.class); 19 return res; 20 } 21}
启动client 端口 8081
访问: http://localhost:8081/test
1以上为基于RestTemplate 通信方式.使用Feign通信eureka clienta 项目不变化修改 client 项目:1. 添加依赖 2 3<dependency> 4 <groupId>org.springframework.cloud</groupId> 5 <artifactId>spring-cloud-starter-openfeign</artifactId> 6 </dependency>
2. 启动类添加注解
@EnableFeignClients
3. 创建一个接口 并增加注解
1@FeignClient(name = "CLIENTA") // name是服务的名字 2public interface ClientAClient { 3 4 @GetMapping("/msg") // 基于路由匹配, 方法名可以不同 5 String msg(); 6}
4. 在controller中直接使用
1@RestController 2public class HelloController { 3 @Autowired 4 private ClientAClient clientAClient; 5 @GetMapping("/test") 6 public String test() { 7 return clientAClient.msg(); 8 } 9}
附pom.xml文件 注意版本对应 http://spring.io/projects/spring-cloud 官网
1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.example</groupId> 7 <artifactId>client</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>war</packaging> 10 11 <name>client</name> 12 <description>Demo project for Spring Boot</description> 13 <parent> 14 <groupId>org.springframework.boot</groupId> 15 <artifactId>spring-boot-starter-parent</artifactId> 16 <version>2.0.2.RELEASE</version> 17 <relativePath/> <!-- lookup parent from repository --> 18 </parent> 19 20 <properties> 21 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 22 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 23 <java.version>1.8</java.version> 24 <spring-cloud.version>Finchley.SR2</spring-cloud.version> 25 </properties> 26 27 <dependencies> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-web</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>org.springframework.cloud</groupId> 34 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 35 </dependency> 36 <dependency> 37 <groupId>org.springframework.cloud</groupId> 38 <artifactId>spring-cloud-commons</artifactId> 39 </dependency> 40 <dependency> 41 <groupId>org.springframework.boot</groupId> 42 <artifactId>spring-boot-starter-tomcat</artifactId> 43 <scope>provided</scope> 44 </dependency> 45 <dependency> 46 <groupId>org.springframework.cloud</groupId> 47 <artifactId>spring-cloud-starter-openfeign</artifactId> 48 </dependency> 49 <dependency> 50 <groupId>org.springframework.boot</groupId> 51 <artifactId>spring-boot-starter-test</artifactId> 52 <scope>test</scope> 53 </dependency> 54 </dependencies> 55 56 <dependencyManagement> 57 <dependencies> 58 <dependency> 59 <groupId>org.springframework.cloud</groupId> 60 <artifactId>spring-cloud-dependencies</artifactId> 61 <version>${spring-cloud.version}</version> 62 <type>pom</type> 63 <scope>import</scope> 64 </dependency> 65 </dependencies> 66 </dependencyManagement> 67 68 <build> 69 <plugins> 70 <plugin> 71 <groupId>org.springframework.boot</groupId> 72 <artifactId>spring-boot-maven-plugin</artifactId> 73 </plugin> 74 </plugins> 75 </build> 76 77 78</project>