springcloud微服务学习之Eureka服务注册中心的搭建

springcloud和Dubbo的对比

RPC就是一台服务器上的代码调用另一台服务器上代码里的方法

  • dubbo的分布式治理核心是zookeeper
  • zookeeper是dubbo的分布式治理核心
  • zookeeper是CA (如果一个节点挂了就直接拒绝服务(强一致性))
  • zookeeper有主从关系
  • springcloud的分布式治理核心是eureka
  • Eureka是springcloud的分布式治理的核心
  • Eureka是 AP
  • Eureka没有主从关系,每个节点都保留数据的副本然后互相之间进行数据的同步。如果一个节点挂了可能会保存一段时间的服务列表(高可用性)有数据不一致的分险。

配置Eureka

pom文件加入

<?xml version="1.0" encoding="UTF-8"?>
<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.guohe3</groupId>
	<artifactId>eureka</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>eureka</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<fastjson.version>1.2.45</fastjson.version>
	</properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
				<version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
	<dependencies>

		<!--增加eureka-server的依赖-->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

复制代码

application.yml的配置

server:
  port: 8888
eureka:
  instance:
    hostname: eureka
  client:
    register-with-eureka: false #本身不需要去注册服务
    fetch-registry: false #一个服务的时候不需要设置为true
    service-url: #配置一个map
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
复制代码

然后去新建一个springcloud工程作为服务提供者,注册服务的client pom文件和上面一样只是把

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>
复制代码

改成

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
复制代码

application.properties配置

server.port=8083
spring.application.name=hello #根据名称来标识是否属于一组服务
eureka.client.service-url.defaultZone=http://localhost:8888/eureka/
复制代码

运行结果:

  • 此时默认是开启了自我保护模式的,当服务不可用的时候注册中心不会去踢掉它(下面会讲如何取消自我保护)
  • 根据spring.application.name=hello 来区分是否是一套服务

注册中心集群配置

一个服务注册中心容易发生单点故障,所以要配置集群
准备四个springcloud工程,两个注册服务,两个服务提供者pom文件配置和上述一样
server1配置:

server:
  port: 8888
eureka:
  instance:
    hostname: eureka
    lease-expiration-duration-in-seconds: 90 #续约超时时间
    lease-renewal-interval-in-seconds: 30 #续约请求间隔时间
  client:
    service-url:
      defaultZone: http://localhost:8889/eureka/ #服务注册url是另一个注册中心的,以此来相互注册
    registry-fetch-interval-seconds: 30  #服务列表要定时刷新防止请求已经过时的服务
  server:
    enable-self-preservation: false #关闭自我保护
spring:
  application:
    name: eureka-server #必须要配置
复制代码

server2配置

server:
  port: 8889
eureka:
  instance:
    hostname: eureka2
  client:
    service-url:
      defaultZone: http://localhost:8888/eureka/
  server:
      enable-self-preservation: false
spring:
  application:
    name: eureka-server
复制代码

server1和server2的主要配置是端口不同,服务注册的url是对方的,hostname不能一样

client1配置

server.port=8081
spring.application.name=hello
eureka.client.service-url.defaultZone=http://localhost:8888/eureka/,http://localhost:8888/eureka/
复制代码

client2配置

server.port=8082
spring.application.name=hello
eureka.client.service-url.defaultZone=http://localhost:8888/eureka/,http://localhost:8888/eureka/
复制代码

client1和client2的主要区别是端口不同,注意,应用名称必须是一样的才算是一组服务,url.defaultZone逗号隔开多个服务的url

启动结果

Eureka 工作原理

服务调用者从服务注册中心获取可用服务列表,然后通过负载均衡选择调用哪个服务

心跳和续约的区别:
心态:注册中心会不断发送请求确认服务是否可用
续约:服务向注册中心发送请求来更新到期时间,进行续约。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值