SpringCloudDemo
商品微服务
Eureka 服务注册与发现
Eureka Server 注册中心
pom
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
Application加注解
@EnableEurekaServer
application.yml
## spring配置
spring:
application:
name: eureka
## 端口
server:
port: 8761
## eureka相关配置
eureka:
client:
# 服务端可选false不进行自注册
register-with-eureka: false
# 服务注册地址
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
Eureka Client 服务注册
pom
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.boot
spring-boot-starter-web
Application加注解
@EnableDiscoveryClient
application.yml
spring:
application:
name: product
# eureka配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8761/eureka/
服务发现分两种方法
客户端发现(客户端可知道后端服务数量,ip)
Eureka
服务端发现(代理。客户端对后端服务不可知)
Nginx
Zookeeper
微服务通信方式
HTTP
SpringCloud
RPC
Dubbo
SpringCloud应用间通信方式
应用A
ServerController
@RestController
@RequestMapping
public class ServerController {
@GetMapping("/msg")
public String msg() {
return "this is product";
}
}
应用B
RestTemplate实现
ClientController
package com.springclouddemo.order.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
/**
* author: mSun
* date: 2018/10/15
*/
@RestController
@Slf4j
public class ClientController {
@Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate;
@GetMapping("/getProductMsg")
public String getProductMsg() {
// 方法一(直接使用restTemplate,url写死)
// RestTemplate restTemplate = new RestTemplate();
// String url = "http://127.0.0.1:8080/msg";
// String response = restTemplate.getForObject(url,String.class);
// 方法二(利用loadBalancerClient通过应用名获取url,然后使用restTemplate获取)
// ServiceInstance serviceInstance = loadBalancerClient.choose("PRODUCT");
// RestTemplate restTemplate = new RestTemplate();
// String url = String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()+"/msg");
// String response = restTemplate.getForObject(url,String.class);
// 方式三(利用@LoadBalanc