pom文件:
<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.toov5</groupId>
<artifactId>member</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
<!-- 管理依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- SpringBoot整合Web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- SpringBoot整合eureka客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
<!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
yml文件:
###服务启动端口号
server:
port: 8000
###服务名称(服务注册到eureka名称)
spring:
application:
name: app-toov5-member
###服务注册到eureka地址
eureka:
client:
service-url:
##当前会员注册到eureka服务 地址+端口号
defaultZone: http://127.0.0.1:8100/eureka
###因为该应用为注册中心,不会注册自己 这里 这两个可以不写
register-with-eureka: true
###是否需要从eureka上获取注册信息
fetch-registry: true
controller类
package com.toov5.api.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MemberApiController { @RequestMapping("/getMember") public String getMember() { return "会员服务"; } }
启动类
package com.toov5.api.app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient //注册到eureka public class AppMember { public static void main(String[] args) { SpringApplication.run(AppMember.class, args); } }
先启动eureka,再启动服务:
上面Eureka会帮助生成地址~
(通过获取服务名字 然后获取访问地址)
服务调用:
客户端调用工具 SpringCloud里面有rest Spring boot帮助整合的,底层封装了Http Client 默认整合了ribbon负载均衡器
feign(spring cloud里面的)
解决RestTemplate注册到spring boot 容器中 @bean 方式
如果使用RestTemplate 方式以别名方式进行调用,依赖Ribbon负载均衡器 @LoadBalanced
@LoadBalanced就能让这个RestTemplate在请求时拥有客户端负载均衡的能力
yml:
###服务启动端口号
server:
port: 8001
###服务名称(服务注册到eureka名称)
spring:
application:
name: app-toov5-order
###服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
###因为该应用为注册中心,不会注册自己这里 这两个可以不写
register-with-eureka: true ###是否需要从eureka上获取注册信息 fetch-registry: true
controller
package com.toov5.api.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class OrderController { @Autowired private RestTemplate restTemplate; @RequestMapping("/getOrder") // 订单服务调用会员服务 public String getOrder() { // 一种直接调用,一种服务别名调用 // String result = restTemplate.getForObject("http://localhost:8000/getMember", String.class); String url ="http://app-toov5-order/getMember"; //使用别名去注册中心找对应服务调用地址 String result = restTemplate.getForObject(url, String.class); System.out.println("订单服务调用会员服务result" + result); return result; } }
启动类
package com.toov5.api.controller; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableEurekaClient public class AppOrder { public static void main(String[] args) { SpringApplication.run(AppOrder.class, args); } //解决RestTemplate找不到问题 把restTemplate注册到Spring Boot容器中 如果要使用别名 必须加 @LoadBalanced @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } }
两个都启动后有两个服务了
访问之,
可以多启动几个Member服务,可以实现本地负载均衡哦~~轮询机制~
启动,两个服务: