然后8000 是我们要注册的提供对外服务(member),8001是我们服务的消费方(调用方) (order)
8100环境配置:
pom.xml
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Finchley.M7
pom
import
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone
false
application.yml 需要把自己注册到 9100服务器上
###服务端口号
server:
port: 8100
##定义服务名称
spring:
application:
name: app-eureka
eureka:
instance:
###注册中心ip地址
hostname: 127.0.0.1
client:
serviceUrl:
##注册地址
defaultZone: http://${eureka.instance.hostname}:9100/eureka/
####因为自己是注册中心,是否需要将自己注册给自己的注册中心(集群的时候是需要是为true)
register-with-eureka: true
###因为自己是注册中心, 不需要去检索服务信息
fetch-registry: true
App.java启动类
@SpringBootApplication
@EnableEurekaServer
public class AppEureka8100 {
// @EnableEurekaServer 表示开启EurekaServer服务 开启注册中心
public static void main(String[] args) {
SpringApplication.run(AppEureka8100.class, args);
}
}
9100环境配置 :
和上面8100相反,也就是 把上面三个文件中的 8100改为9100 9100 改为8100 即可
8000-member 环境配置: 这个是要注册到Eureka上,被 order服务调用的
pom.xml
org.springframework.boot
spring-boot-starter-parent
2.0.1.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Finchley.M7
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
spring-milestones
Spring Milestones
https://repo.spring.io/libs-milestone
false
application.yml
###会员项目的端口号
server:
port: 8000
###服务别名----服务注册到注册中心名称
spring:
application:
name: app-member
eureka:
client:
service-url:
##### 当前会员服务注册到eureka服务地址
defaultZone: http://localhost:8100/eureka,http://localhost:9100/eureka
### 需要将我的服务注册到eureka上
register-with-eureka: true
####需要检索服务
fetch-registry: true
app.java
@SpringBootApplication
@EnableEurekaClient
public class AppMember {
// @EnableEurekaClient 将当前服务注册到eureka上
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
提供给外部调用的服务 MemberApiController
@RestController
public class MemberApiController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/getMember")
public String getMember() {
return "this is member,我是会员服务,springcloud2.0版本,端口号:" + serverPort;
}
}
8001-order 环境配置:
pom.xml 同8000
application.yml
###订单服务的端口号
server:
port: 8001
###服务别名----服务注册到注册中心名称
spring:
application:
name: app-order
eureka:
client:
service-url:
##### 当前会员服务注册到eureka服务地址
defaultZone: http://localhost:8100/eureka,http://localhost:9100/eureka
### 需要将我的服务注册到eureka上
register-with-eureka: true
####需要检索服务
fetch-registry: true
调用服务的controller类
@RestController
public class OrderControler {
// RestTemplate 是有SpringBoot Web组件提供 默认整合ribbon负载均衡器
// rest方式底层是采用httpclient技术
@Autowired
private RestTemplate restTemplate;
/**
* 在SpringCloud 中有两种方式调用 rest、fegin(SpringCloud)
*
* @return
*/
// 订单服务调用会员服务
@RequestMapping("/getOrder")
public String getOrder() {
// 有两种方式,一种是采用服务别名方式调用,另一种是直接调用 使用别名去注册中心上获取对应的服务调用地址
String url = "http://app-member/getMember";
String result = restTemplate.getForObject(url, String.class);
System.out.println("订单服务调用会员服务result:" + result);
return result;
}
}
App.java
@SpringBootApplication
@EnableEurekaClient
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class, args);
// 如果使用rest方式以别名方式进行调用依赖ribbon负载均衡器 @LoadBalanced
// @LoadBalanced就能让这个RestTemplate在请求时拥有客户端负载均衡的能力
}
// 解决RestTemplate 找不到原因 应该把restTemplate注册SpringBoot容器中 @bean
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
好了,然后启动 8100 9100 8000 8001 四台服务器,
然后我们查看一下8100 9100两个注册中心的内容:
然后 输入 127.0.0.1:8001/getOrder 地址,测试调用的效果:
然后我们 修改 member 环境,把yml中的 8000端口,改为 8002 保存,启动,然后在浏览器中输入127.0.0.1:8001/getOrder 地址,测试调用的效果,多刷新几次
会发现 member 服务器,返回的结果中,端口号,在轮询发生变化。。。这个是cloud默认的 负载均衡机制。采用的轮询方式