- 服务提供者,服务消费者,和服务发现主键之间的关系
①在各个服务启动时候,就已经将自己的网络地址等信息注册到服务发现组件里面了并且存储这些信息
② 服务消费者可以从发现组件中查找服务提供者的网络地址,并且用该地址调用服务提供的接口
③各个微服务与发现组件使用一定机制通信。服务发现组件入长时间无法与某个微服务通信的话。就会直接注销实例
④微服务网络地址发生改变时,会重新注册到发现服务组件中,服务消费者就无需人工修改的提供网络的网址了
2.下面看一下服务消费和服务提供者和服务消费者之间的关系
3.Eureka介绍和使用
3.1简单的图介绍Eureka的原理
上面图可能画丑了点
解释一下上图的意思吧
Application Service相当于服务提供者
Application Client 相当于服务消费者
Maker Rometo Call 相当于Restful API
看上面架构图可以看出Eureka包含两个组件,分别是:Eureka Client和Eureka Server。
Eureka Server 作用是可以提供发现服务的能力,各个微服启动,都会注册自己的信息并且保存
Eureka Client 是java的客户端,微服务启动后会发出心跳给延续自己的使用时间会周日期应该是默认为30秒,如果在一定时间没没有接受到微服的实例心跳,Eureka Server将会注销实例(默认时间是90秒)。假如是多个实例的话,它们之间会互相复制。来实现数据的同步。Eureka Client会缓存服务的注册表中的信息,从而降低了Eureka Server服务的压力
4.写一个Eureka Server
在application.properties配置如下
server.port=8082
#表示是否自己注册到Eureka server 默认为true
eureka.client.register-with-eureka=false
#表示是否从Eureka Server获取信息
eureka.client.fetch-registry=false
#设置与Eureka Server交互地址。查询服务和祖册服务都需要依赖这个地址。默认是http://localhost:8761/eureka/
eureka.client.service-url.default-zone=http://localhost:8761/eureka/
启动类代码如下添加@Eureka注解就可以访问你的微服务
package com.zjm.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class MiroserviceDiscoveryEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(MiroserviceDiscoveryEurekaApplication.class, args);
}
}
访问http://localhost:8761/ 显示如下
现在DSReplicas没有微服注册进来。
下面对提供者和服务消费者进行注册
访问http://localhost:8761/
这个有错误,是因为两个服务端口一直导致的,要改一下运行Tomcat的端口就行了,两个服务都注册进来的。
application,.properties 配置如下连个服务都是一致的只要改动server.port就可以了
#把应用名称注册的到Eureka Server上
spring.application.name=miroservice-consumer-movie
#这个8761 是默认的 可以看源码
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#表示IP注册到Eureka Server
eureka.instance.ip-address=true
server.port=8081
MiroserviceConsumerMovieApplication.java,另个一个服务同理配置,这里面的@EnableDiscoveryClient可以用@EnableEurekaClient
代替。@EnableDiscoveryClient为各个组件提供服务支持的。这里只用到了单点服务
package com.zjm.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class MiroserviceConsumerMovieApplication {
public static void main(String[] args) {
SpringApplication.run(MiroserviceConsumerMovieApplication.class, args);
}
}