最近在忙一些其它的事情,两个城市来回跑还要办一些手续,挺费劲的,学习的事情也就耽误了一些,尽量赶吧。

  spring cloud为分布式的微服务架构提供了一站式的解决方案,eureka注册中心在spring cloud的架构中占据了非常重要的角色,这使得我们有必要认真理清eureka的设计和使用思路。说起注册中心,用过dubbo的话会直接联想到zookeeper,我们先暂时不管他们的异同以及spring cloud的整体结构,先来看一下它是怎么使用的,然后再来看跟zk的区别。
--------------------------------------------------------------------------------------------------------------------
注册中心,当然就是让别的服务把信息注册到自己,然后供消费者使用的这么个应用。这里涉及三个角色:注册中心、服务生产者跟服务消费者,我们分别搭建这三个服务,来看一下三者是如何使用的。
1、搭建eureka-server

  eureka服务端的部署有两种方式:1、直接下载war包放入tomcat的webapp下;2、spring boot开启eureka服务端,实际跟1是类似的。
  第一种方式我没有尝试成功,一直报一个连接错误的异常,应该是默认连接自己失败导致的,但配置文件中没看到相关配置,,,,跳过,以后有时间了再搞。
  第二种方式:搭建spring boot项目,pom文件配置如下:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/>
</parent> <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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

  pom文件中,parent信息用于继承spring boot的基础默认配置,这个spring boot的parent实际是个空项目,只有一个pom文件,包含一些版本号等信息;dependencyManagement是用于描述Spring cloud所依赖的版本信息;因为spring boot跟spring cloud版本有对应关系,不能随意匹配版本;还有要注意的是此处eureka的依赖为eureka-server,不是starter,starter是用于客户端的jar包。

  在resources下新建bootstrap.yml,内容为:  
spring:
application:
name: eureka-server
  之所以在bootstrap.yml中设置,是因为该文件会优先于application.yml加载,而此设置需要提前设置。application的内容为:
#服务的描述信息,可以填写服务描述,责任联系人等信息
info:
name: Eureka server
contact: eureka 服务器
server:
port: 8761 eureka:
client:
#是否注册到eureka server
registerWithEureka: true
#是否从服务器获取信息
fetchRegistry: false
#eureka server地址
serviceUrl:
defaultZone: http://127.0.0.1:8761/eureka/
server:
#获取不到集群里对等服务器上的实例时,需要等待的时间,单位毫秒
waitTimeInMsWhenSyncEmpty: 0
#开启自我保护,无论如何都要剔除心跳检测异常的服务
enableSelfPreservation: true
#updatePeerEurekaNodes执行间隔时间,集群信息刷新间隔时间
peerEurekaNodesUpdateIntervalMs: 100000
   最后,在application.java中启用eureka服务端配置信息:
@SpringBootApplication
@EnableEurekaServer
public class MyEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(MyEurekaApplication.class, args);
}
}
运行程序,访问 http://localhost:8761

 

  2、生产者搭建
  同样的spring boot项目,只是pom中的eureka换为了客户端的jar,也就是:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
  bootsrtap.yml内容:
spring:
application:
name: sms-module
application.yml内容:
info:
name: author:wzy,class:develop,tel:17301394307
server:
port: 9003
eureka:
client:
registerWithEureka: true
fetchRegistry: true
serverUrl:
defaultZone: http://127.0.0.1:8761/eureka
instance:
#心跳间隔
leaseRenewalIntervalInSeconds: 10
启用eureka客户端配置
@EnableEurekaClient
@SpringBootApplication
public class SmsApplication {
public static void main(String[] args) {
SpringApplication.run(SmsApplication.class, args);
}
}
可以看到刚起的两个服务:

  3、消费者搭建

相关配置同生产者,我们此处主要看如何获取服务信息,手动创建controller如下:
@RequestMapping("/mytest")
@RestController
public class TestController {
@Autowired
DiscoveryClient discoveryClient; @RequestMapping("/test")
public String test(){
List<ServiceInstance> instanceList = discoveryClient.getInstances("sms-module");
StringBuffer sb = new StringBuffer();
for(int i=0; i<instanceList.size(); i++){
ServiceInstance instance = instanceList.get(i);
String host = instance.getHost();
int port = instance.getPort();
String result = new RestTemplate().getForObject("http://"+host+":"+port+"/sms/sendmsg",String.class);
sb.append(result+",");
}
return sb.toString();
}
}
其中,DiscoveryClient是eureka 客户端提供的服务发现工具类,默认会自动注册到spring中;我们可以通过getInstances根据服务名称获取相关的服务实例列表,通过实例可以查看到具体的ip,端口等信息,通过RestTemplate的getForObject可以直接调用相关方法并获取返回结果,这里拿到的是返回结果的body信息;如需要获取其它信息,可以调用getForEntity来获取。直接访问http://localhost:8080/mytest/test
生产者的代码及信息输出:
可以看到,消费者调用了getForObject后,生产者对应服务实例的相关代码也执行了。
------------------------------------------------------------------------------------------------------------------------------
就这样吧,先做个简单的了解,接下来我们看eureka的实现原理及机制

注册中心eureka的更多相关文章

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

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

  2. springcloud入门系列(二):注册中心Eureka

    搭建注册中心Eureka 1.pom中依赖 <dependencies> <dependency> <groupId>org.springframework.clo ...

  3. spring cloud 服务注册中心eureka高可用集群搭建

    spring cloud 服务注册中心eureka高可用集群搭建 一,准备工作 eureka可以类比zookeeper,本文用三台机器搭建集群,也就是说要启动三个eureka注册中心 1 本文三台eu ...

  4. 跟我学SpringCloud | 第二篇:注册中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  5. 孰能巧用 Spring Cloud 服务注册中心Eureka

    Eureka介绍 在Spring Cloud Netflix 整合技术栈中,Eureka既可以作为服务注册中心也可以用于服务发现对整个微服务架构起着最核心的整合作用. Eureka是基于REST(Re ...

  6. 作为注册中心Eureka比Zookeeper好在哪里?

    作为注册中心Eureka比Zookeeper好在哪里?    著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性),A(可用性)和P(分区容错性).由于分区容错性P在是分布式系统中必须要保证 ...

  7. spring Cloud服务注册中心Eureka集群

    spring Cloud服务注册中心Eureka集群配置: 在application.yml文件加以下配置: server: port: 8761 tomcat: uri-encoding: UTF- ...

  8. SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制

    第四章:服务注册中心 Eureka 4-1. Eureka 注册中心高可用集群概述在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性 问题,不能有单点故障,由于注册中心 eurek ...

  9. springcloud(二):注册中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  10. Spring Cloud 注册中心Eureka

    一.简介 最近在看Spring Cloud微服务,接下来的时间和大家一起分享我所看到的,公司现在用的是dubbo ,之后有时间也去了解了解dubbo的源码.与dubbo相比较,Spring Cloud ...

随机推荐

  1. 未能加载文件或程序集“Interop.SQLDMO”或它的某一个依赖项

    程序运行没问题,当您配置好IIS后,打开安装向导时出现以下错误信息: 解决办法为:在IIS应用程序池中“启用32位应用程序”, 1,打开IIS应用程序池,选中相应应用程序池,点击右侧“高级设置” 2, ...

  2. Memcached Cache

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using Memcached ...

  3. C#面向对象之三大特性: 封装

    学到封装就会想到访问修饰符,说到访问修饰符,就会想到访问等级,或者说是访问能力的大小.当然也少不了默认的访问类型. C# 方法默认访问级别 : private (私有的) C# 类默认访问级别 : i ...

  4. C#中如何防止Excel做科学计算法转换

    C#中如何防止Excel做科学计算法转换  string style = @"<style>.text{mso-number-format:\@;}</style>& ...

  5. 动态变更Repeater控件HeaderTemplate列名

    本博文,Insus.NET教你动态实现变更Repeater控件HeaderTemplate列名.一般情况之下,是不需要动态变更,只有动态有Repeater控件不变情况之下,来显示多种数据源进行绑定.这 ...

  6. c# 生成xml,xsi不能生成问题

    C#  生成xml,xsi不能生成问题 一.简单了解xsi及其其他属性: xsi:schemaLocation用于声明了目标名称空间的模式文档,属性的值由一个URI引用对组成,两个URI之间以空白符分 ...

  7. Oracle中date转为timstam可以函数to_timestamp的方式来转化

    data 转为timstam可以函数to_timestamp的方式来转化 Select to_timestamp('2018-02-27 09:48:28','yyyy-mm-dd hh24:mi:s ...

  8. JAVA学习第三篇Boolean

    Boolean是布尔值. 布尔值只有两个值:真和假.写作:true false. 那么如何使用呢? 最简单的用法: public class demo{ public static void main ...

  9. MySQL之常用命令

    前言 在说MySQL命令之前,需要介绍一些navicat:navicat是一套快速.可靠并且价格相宜的数据库管理工具,它的出现简化了数据库的管理,降低了管理成本,提高了对数据库的管理效率.Navica ...

  10. JavaScript——原生js实现瀑布流

    瀑布流介绍及实现原理: 瀑布流是一种页面布局,页面上也有多等宽的块(块就页面内容),每一块都是绝对定位(absolute),每个块排列的方式如下:寻找现在高度最小的列,把该块定位到该列下方.需要知道, ...