这两年可以说微服务是热词,也是新领域,学习的成本也较高,基础东西太多比如什么Dubbo,zookeeper,Springboot等等。Dubbo也是实现服务治理又是阿里出的一套开源RPC框架,但是SpringCloud出现后便立即热火朝天,当然阿里也加入了SpringCloud的孵化。

什么是微服务,分布式?

分布式:不同的模块部署在不同的服务器上,可以更好的解决网站高并发。

微服务:架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的跟严格执行 SOA到微服务架构的演进过程。简单的说把项目拆分成各各模块,用注册中心的方式把服务都链接在一起

服务提供者与消费关系

服务提供者:提供服务被人调用

消费者:调用服务

今天我们说下SpringCloud的Eureka注册中心

官方:

  Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
 
  Eureka包含两个组件:Eureka Server和Eureka Client。
  Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
  Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
  在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
   环境搭建:
本次环境用Gradle+IDEA
1.先搭建注册中心
2.主项目Gradle
group 'com.wang'
version '1.0-SNAPSHOT' apply plugin: 'java' sourceCompatibility = 1.8 buildscript {
ext {//定义一个变量,统一规定springboot的版本
springBootVersion = '1.5.10.RELEASE'
}
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
jcenter()
mavenCentral()
//Spring repo
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/release" }
maven { url 'http://repo.spring.io/plugins-snapshot' }
} dependencies {//用来打包
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
//设定当前所有的项目的配置
allprojects {
group 'com.ssx'
version '1.0-SNAPSHOT' ext {
springCloudVersion = 'Edgware.SR2'
} repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
jcenter()
mavenCentral()
//Spring repo
maven { url "http://repo.spring.io/snapshot" }
maven { url "http://repo.spring.io/milestone" }
maven { url "http://repo.spring.io/release" }
maven { url 'http://repo.spring.io/plugins-snapshot' }
}
}
//设定当前模块项目中的配置
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot' dependencies {
//使用springboot-web组件,但是排除tomcat组件
compile ('org.springframework.boot:spring-boot-starter-web'){
exclude module:"spring-boot-starter-tomcat"
}
//使用undertow作为应用服务,作为servlet容器
compile 'org.springframework.boot:spring-boot-starter-undertow'
//使用健康检查组件
compile 'org.springframework.boot:spring-boot-starter-actuator'
testCompile(
group: 'junit', name: 'junit', version: '4.12'
)
} dependencyManagement {
imports {
//加上此配置后,如果需要引用springcloud的组件,就不需要再提供版本信息
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
}

3.注册中心启动类

package org.gw.reigster.conter;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; /**
* @DATA 2019-02-27 19:56
* @Author 张国伟 WeChat:17630376104
* @Description TODO
*/ @EnableEurekaServer #这个是表示这个项目作为euraka注册中心
@SpringBootApplication
public class ReigsterConterProvider {
public static void main(String[] args) {
SpringApplication.run(ReigsterConterProvider.class,args);
}
}

4.注册中心yml

server:
port: 8888
spring:
application:
name: reigster-conter
eureka:
client:
register-with-eureka: false #启动时不注册 本来就是注册中心 表示自己是注册中心
fetch-registry: false #不向注册中心拉取数据
server:
enable-self-preservation: false #关闭自我保护 测试环境用 生产环境一般不用

5.启动注册中心访问8888

这个为Eureka的信息页面 可以看到这个时候 Instances currently registered with Eureka里面是No instances available 也就是这个时候还没有服务注册进来,下面我们写注册方

这个模块为solr

package org.gw.solr;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient; /**
* @DATA 2019-02-27 20:38
* @Author 张国伟 WeChat:17630376104
* @Description TODO
*/ @EnableEurekaClient #这里为Eureka客户端也就是服务
@SpringBootApplication
public class ProjectSolrProvider {
public static void main(String[] args) {
SpringApplication.run(ProjectSolrProvider.class, args);
}
}

yml

server:
port: 10002
spring:
application:
name: project-solr
eureka:
client:
service-url:
defaultZone: http://localhost:8888/eureka/
instance:
prefer-ip-address: true

这时候我们启动这个服务

这个时候可以看到 有个服务已经注册进来

这个就是实现了 注册也发现,那我们紧接这 如何实现服务与服务之间调用呢?我现在想project-shopping-mall模块的controller调用solr的controller如何实现呢

package org.gw.shopping.mall;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate; /**
* @DATA 2019-02-27 20:24
* @Author 张国伟 WeChat:17630376104
* @Description TODO
*/
@EnableEurekaClient
@SpringBootApplication
public class ShoppingMallProvider {
@LoadBalanced
@Bean
public RestTemplate resultTemplate() {
RestTemplate template = new RestTemplate();
return template;
} public static void main(String[] args) {
SpringApplication.run(ShoppingMallProvider.class, args);
}
}

RestTemplate表示网络请求 在启动类里把他实例

package org.gw.shopping.mall.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; /**
* @DATA 2019-02-27 20:45
* @Author 张国伟 WeChat:17630376104
* @Description TODO
*/
@Controller
public class ShopController {
@Autowired
private RestTemplate restTemplate; @RequestMapping("/toIndex")
public String toIndex(Model model) {
String msg = restTemplate.getForEntity("http://PROJECT-SOLR/solrSearc", String.class).getBody();
model.addAttribute("msg", msg);
return "index";
}
}

这个为调用solr的controller根据名字调用

package org.gw.solr.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @DATA 2019-02-27 20:40
* @Author 张国伟 WeChat:17630376104
* @Description TODO
*/
@RestController
public class SolrSearchController { @RequestMapping("/solrSearc")
public String solrSearc(){
return "从solr查询到数据";
}
}

意思就是说 我在shop里调用solr的controller他会返回一个从solr查询到数据

我们来尝试下

shop模块里有thymeleaf模板展示数据

<!DOCTYPE html>
<html lang="en" xmlxs:th="http://www.thymeleaf.org" xmlns:xmlxs="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
</head >
<body>
<h1>欢迎进入商城</h1>
<h2>从solr微服务中查到的数据::::<span th:text="${msg}"></span></h2>
</body>
</html>

可以看到 已经成功拿到数据

到这里,我们已经实现服务的注册与发现,下章说 链路跟踪,有问题请及时评论。

SpringCloud-Eureka注册与发现的更多相关文章

  1. spring cloud 注册中心--eureka注册与发现

    本文详细介绍spring cloud微服务的默认注册中心--eureka注册与发现.开发环境需要Windows系统.jdk和intellij idea.与zookeeper注册中心相比,eureka不 ...

  2. 一、springcloud服务注册、发现、调用(consul/eureka)

    1.Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全 ...

  3. Spring-Cloud之Eureka注册与发现-2

    一.Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的.SpringCloud将它集成在其 ...

  4. SpringCloud服务注册与发现中心-Eureka

    1.服务注册与发现的好处: 假设没有这个东西,那么如果存在a,b,c三个同样的服务: 而现在有一个u服务需要用到a或b或c提供的接口,那么u里面肯定是需要配置这三个服务的地址,然后调用的时候还有问题就 ...

  5. springcloud~服务注册与发现Eureka的使用

    服务注册与发现是微服务里的概念,也是一个基本的组件,负责服务组件的认证,即实现『你是谁』的功能,在服务注册与发现里,存在两种模式,即服务端发现和客户端发现,咱们今天说的eureka属于客户端发现! 下 ...

  6. SpringCloud服务注册与发现

    1.介绍对于微服务的治理而言,其核心就是服务的注册和发现.在SpringCloud 中提供了多种服务注册与发现组件:Eureka,Consul,Zookeeper.官方推荐使用Eureka. 说明:E ...

  7. 三. SpringCloud服务注册与发现

    1. Eureka 1.1 Eureka理解 什么是服务治理 Spring Cloud封装了Netflix公司开发的Eurkeka模块来实现服务治理 在传统的rpc远程调用框架中,管理每个服务与服务之 ...

  8. SpringCloud Eureka(注册中心集群)

    多个注册中心,其实用不同的配置对应 不同的端口号注册就行了. 注册中心自己也是个服务,看看之前的单个注册中心是怎么样的呢? server: port: 8888 # 服务端口eureka: insta ...

  9. 【spring cloud】一个ms微服务想要给注册中心eureka发现,需要满足这些条件,微服务不能被eureka注册中心发现的解决方案

    在spring cloud中,一个新的微服务想要被注册中心发现,需要注意几个地方: 1.pom.xml文件依赖中需要有这个依赖 spring boot 2.x 需要这个依赖 <dependenc ...

  10. spring-cloud eureka注册发现

    idea新建一个eureka server服务 application.yml 配置: spring: application: name: eureka-server server: port: 7 ...

随机推荐

  1. 报文ISO8583协议

    本人刚接触金融IT行业,对报文ISO8583协议也是刚刚了解,看了篇文章,个人觉得写得很好,特此分享如下: 如果单纯的讲IS08583那些字段的定义,我觉得没有什么意思,标准中已经对每个字段解释的非常 ...

  2. JavaScript引用类型之Array类型API详解

    Array类型也是ECMASCRIPT中最常见的数据类型,而且数据的每一项可以保存任何类型的数值,而且数组的大小是可以动态调整的,可以随着数据的添加自动增长以容纳新的数据.下面,总结数据的一些常用方法 ...

  3. Eclipse连接Hadoop集群及WordCount实践

    声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.环境准备 1.JDK安装与配置 2.Eclipse下载 下载解压即可,下载地址:https://pan.baidu.com/s/1i51UsVN ...

  4. 【4】Asp.Net Core2.2中间件多扩展对应应用

    [前言] 上一篇完成了Asp.Net Core 2.2全新的管道处理模型解析,“俄罗斯套娃”式的委托嵌套和传递,组建了扩展性无与伦比的管道模型!与此同时,委托嵌套过于复杂,使用起来并不友好,然后多种扩 ...

  5. ADO.NET 基础学习笔记1

    1. ODBC.OLEDB.ADO.ADO.NET之间的关系 ODBC: 开放数据库互连(ODBC)是MICROSOFT提出的数据库访问接口标准.ODBC(Open DatabaseConnectiv ...

  6. 如何修复使用WSUS进行升级Win 10 更新1809的报错(0x8024200)

    备注:该文档有另一个姊妹篇,介绍如何修复下游服务器一直有处于需要文件下载的状况. /* Style Definitions */ table.MsoNormalTable {mso-style-nam ...

  7. bat脚本以管理员身份运行时,目录没有定位到当前目录问题的解决方法

    我们时常使用bat脚本去处理一些事情,有事bat中的命令需要以管理员的身份运行,但是运行后文件的目录自动定位到了C:\Windows\system32下,而不再脚本所在的目录下. 这是我的文件目录,W ...

  8. Win10系统修改主机名、用户名称和密码、以及C盘中的用户文件夹名

    写在前面 近期重新安装了Ubuntu16.04系统,同时也修改了Windows10系统的用户名.密码,还有C盘用户文件夹名称.对于Linux和windows系统来说,修改名称基本都是三部分,主机名.用 ...

  9. 做自己的CEO

    目录 前言 做自己的CEO 做自己的CEO是指什么 为什么要做自己的CEO 如何做自己的CEO 定义自己的愿景.使命和价值观 愿景 (Vision) 使命 (Mission) 价值观 (Values) ...

  10. BASE64编码原理分析脚本实现及逆向案例

    在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理你又了解多少?今天小编带大家了解一下Base64编码原理分析脚本实现及逆向案例的相关内容.   01编码由来 数 ...