SpringCloud01——服务的注册和发现

SpringCloud01——服务的注册和发现

一、微服务的注册和发现

我们在微服务中,往往有服务提供者,服务消费者和服务注册中心。我们之前学习的Zookeeper就是一个注册中心。但是在官方的SpringCloud中,并不推荐使用ZK作为注册中心,我们往往使用eureka

服务提供者,服务消费者,注册中心呈一个三角关系

1.服务提供者将服务注册到中心

2.服务消费者通过注册中心去查找服务

3.查找服务后进行调用

4.服务消费者和服务注册中心保持心跳连接,一旦服务提供者的地址发生改变,注册中心会通知服务消费者

二、注册中心eureka

SpringCloud提供了多种注册中心支持,eureka,zk等,官方推荐eureka

科普:什么是Eureka?
Eureka是Netfix开源的服务发现组件,本身是一个基于Rest的服务。包含Server和Client两部分。SpringCloud将其集成在子项目Spring Cloud Netflix中,从而实现微服务的注册和发现。

2.1.编写Eureka Server

2.1.1.新建一个Spring Starter,导入eureka server

2.1.2.创建一个application.yml,在启动类@EnableEurekaServer

server:
  port: 1111 #服务端口
 
eureka:
  client:
    register-with-eureka: false #是否将自己注册到Eureka服务中,自己本来就是服务无需注册
    fetch-registry: false #是否从Eureka中获取注册信息
    service-url: # Eureka客户端与Eureka服务端交互地址
      defaultZone: http://localhost:${server.port}/eureka/

2.1.3.新建一个Spring Starter,导入eureka,编写一个服务

2.1.4.创建一个application.yml,在启动类@EnableDiscoveryClient,去上面那个注册中心去注册发现

server:
  port: 8081 
  
spring:
  application:
    name: microservice-item
    
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true #是否从eureka中获取注册信息,默认true
    service-url:
      defaultZone: http://localhost:1111/eureka/

2.1.5.编写服务(关键代码)

@Service
public class ItemService {
	
	@Autowired
	private RestTemplate restTemplate;
	
	@Autowired
	private DiscoveryClient discoveryClient;
	
	/**
	 * 商品微服务进行查询
	 * @param id
	 * @return
	 */
	public Item queryItemById(Long id) {
		List<ServiceInstance> instances = discoveryClient.getInstances("MICROSERVICE-ITEM");
		ServiceInstance serviceInstance = instances.get(0);
		String url="http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/item/"+id;
		return restTemplate.getForObject(url, Item.class);
	}
}

2.2.编写eruka-client

2.2.1.新建一个eruka-client,添加eruka发现组件和web包

2.2.2.编写配置文件application.yml

#服务端口
server:
  port: 8888

#应用名称及验证账号
spring:
  application:
    name: server-text

#注册中心
eureka:
  #  server:
  #    enable-self-preservation: false       #关闭保护机制
  #    eviction-interval-timer-in-ms: 2000   #剔除失效服务间隔,单位毫秒
  client:
    register-with-eureka: true
    fetch-registry: true
    #设置服务注册中心的URL
    service-url:
      defaultZone: http://root:root@eureka-7901:7901/eureka/
  instance:
    hostname: server-text

2.2.3.添加启动类注解

@EnableEurekaClient

2.2.4.启动后发现集群启动正常

posted @ 2019-10-06 17:53  SteveYu  阅读(558)  评论(0编辑  收藏  举报