sringcloud2.0学习-3-Eureaka注册中心

SpingCloud注册中心

1.版本选择

本系列学习教程采用的框架版本:
springboot:2.0.3.RELEASE
sringcloud:Finchley.RELEASE

2. sringcloud常用五大组件

服务发现:Netflix Eureka
客服端负载均衡:Netflix Ribbon
断路器:Netflix Hystrix
服务网关:Netflix Zuul
分布式配置:Spring Cloud Config

3. sringcloud注册中心学习

主要内容:

SpringCloud服务注册与发现原理
SpringCloud使用Eureka作为注册中心
搭建高可用Eureka注册中心
SpringCloud使用Consull搭建注册中心

3.1 什么是服务治理

  传统RPC远程调用中,服务与服务依赖关系复杂,所以需要使用服务治理来管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
  RPC远程调用框架的核心设计思想在于注册中心,使用注册中心管理每个服务与服务之间的依赖关系(服务治理)
sringcloud2.0学习-3-Eureaka注册中心_第1张图片如上图,假设订单服务需要调用会员服务查询用户相关信息,订单通过httpclient技术进行调用,这样是没有问题的,但是当一个系统有非常多的服务,并且服务之间相互依赖关系复杂的情况下,会导致服务的URL管理将会非常复杂等很多问题,dubbo官网有很详细的说明:
sringcloud2.0学习-3-Eureaka注册中心_第2张图片
那么这个时候,服务治理技术就登场了,通过服务治理管理服务之间的依赖关系,并实现本地负载均衡,服务注册与发现,容错等

3.2 服务注册与发现原理
3.2.1 注册中心原理

(1)注册中心概念:在任何一个rpc框架中,都有一个注册中心用来存放服务地址(接口地址)相关信息
springcloud支持三种注册中心:Eureka Consul Zookeeper
(2)相关基本概念:
a. 服务提供者:提供服务接口的一方
b. 服务消费者:调用别人的接口进行使用的一方;一个服务既可以是服务提供者,也可以是服务消费者
c. 服务注册:将服务信息注册到注册中心上
d. 服务发现:从注册中心上获取服务信息

3.2.2 服务注册与发现

参考dubbo的组件依赖关系:
sringcloud2.0学习-3-Eureaka注册中心_第3张图片
前面提到的订单服务调用会员服务,在服务治理技术的支撑下,这时候可以变成下面这样一个关系:
sringcloud2.0学习-3-Eureaka注册中心_第4张图片
在上面的图中,会员服务是服务的提供者,订单服务是会员服务的消费者

  1. 先启动注册中心
  2. 启动会员服务;启动过程中,把当前服务信息比如服务地址和端口信息以别名方式注册到注册中心里;
  3. 启动订单服务
  4. 消费者调用接口时,使用服务别名也就是serviceId去注册中心获取实际rpc调用地址
  5. 消费者获取到实际rpc调用地址后,使用本地httpclient技术调用接口
    在springcloud中,服务的消费者获取到rpc调用地址后,会先缓存到JVM中,默认情况下Eureka每隔30s更新一次服务列表;微服务负载均衡是本地(客户端)负载均衡(相对nginx来说;nginx是服务器端负载均衡)
3.3 Eureka注册中心搭建
  • 3.3.1 Maven工程创建sringcloud2.0学习-3-Eureaka注册中心_第5张图片
    加入springboot-starter,springcloud ,eureka server 的相关依赖:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>com.lchtestgroupId>
  <artifactId>springcloud2.0-eureak-serverartifactId>
  <version>0.0.1-SNAPSHOTversion>
   <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.0.3.RELEASEversion>
    parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Finchley.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
    dependencies>
project>

注册中心需要加入的依赖是spring-cloud-starter-netflix-eureka-server

		<dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>
  • 3.3.2 配置文件application.yml
# 注册中心端口号
server:
  port: 8100
eureka:
  instance:
    hostname: 127.0.0.1
  client:
    service-url:
      #服务的注册地址
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
     # defaultZone: http://localhost:8100/eureka/
    # 是否将自己注册到注册中心,只有一个注册中心时选择false,注册中心为集群的时候需要设置为true
    #register-with-eureka: false
    # 单个注册中心,不需要去检索服务信息
    #fetch-registry: false
  • 3.3.3 主启动类:加上@EnableEurekaServer注解开启注册中心
package com.lchtest.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * springcloud eureka注册中心
 * @author pc
 *
 */
@SpringBootApplication
// @EnableEureakServer表示开启注册中心
@EnableEurekaServer
public class AppEureka8100 {
	
	public static void main(String[] args) {
		SpringApplication.run(AppEureka8100.class, args);
	}
}

启动注册中心并访问:
sringcloud2.0学习-3-Eureaka注册中心_第6张图片

3.4 Eureka客户端搭建(服务提供者)

搭建一个会员服务的项目

  • pom依赖
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0modelVersion>
  <groupId>com.lchtestgroupId>
  <artifactId>springcloud2.0-memberartifactId>
  <version>0.0.1-SNAPSHOTversion>
  
   <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.0.3.RELEASEversion>
    parent>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>Finchley.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <dependencies>
               
          
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
         dependency>
         
        <dependency>
			<groupId>org.springframework.bootgroupId>
			<artifactId>spring-boot-starter-webartifactId>
		dependency>
    dependencies>
project>
  • yaml配置文件
# 会员服务项目端口号
server:
  port: 8000
# 服务别名--服务注册到注册中心的名称
spring:
  application:
    name: member
eureka:
  client:
    service-url:
      #将当前服务注册到eureka注册中心
      defaultZone: http://localhost:8100/eureka/
    # 将自己注册到注册中心,设置为true
    register-with-eureka: true
    # 检索服务信息
    fetch-registry: true
  • 主启动类MemberApp:
package com.lchtest.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
// @EnableEurekaClient 将当前服务注册到eureka上
@EnableEurekaClient
public class MemberApp {
	public static void main(String[] args) {
       SpringApplication.run(MemberApp.class, args);
	}
}
  • MemberController
package com.lchtest.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MemberController {
	
	@Value("${server.port}")
	private String port;

	@RequestMapping("/getmember")
	public String getmember() {
		return "this is member service.port=" + port;
	}
}

启动服务,查看是否注册到Eureka注册中心:
sringcloud2.0学习-3-Eureaka注册中心_第7张图片
项目github代码:
注册中心
eureka客户端

你可能感兴趣的:(SpringCloud2.0)