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

  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. 线程池ThreadPool实现异步多线程

    ThreadPool线程池的主要方法: 1. public static Boolean QueueUserWorkItem(WaitCallback wc, Object state); WaitC ...

  2. dubbo心跳机制 (2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 来看一下HeaderExchangeServer.this.getChannels():   1     p ...

  3. tensorboard的安装及遇到的问题

    1 安装tensorboard 打开anaconda prompt,键入下边的命令: activate tensorflow pip install tensorboard 当执行“activate ...

  4. Python3的简单的函数调用

    python3的几种传参方法(初学者): 例1: def func(x,*argv): print(x) print(argv) func('alex','wt','hjc','lao liu') 输 ...

  5. 区块链中的密码学(-)区块链中运用最广的散列算法-SHA256算法分析与实现

    在很多技术人员的眼中,区块链并不是一种新的技术,而是过去很多年计算机技术的组合运用.而在这个方方面面技术的运用上,基于密码学的加密算法可以说是区块链各种特点得以表现的根本,一旦目前使用的加密算法被证实 ...

  6. Python脚本开发练习

    打印乘法口诀表 #!/usr/bin/python #coding=utf-8 print("Hello,World....") print("你好,欢迎来到Python ...

  7. 微信Dat文件解码

    最近在整理磁盘文件,因为经过一段时间的蹂躏后,磁盘实在是太多东西了,不整理一下,简直对不住我的SSD好嘛.偶然发现磁盘中某公司的文件夹占用空间简直不能再大,那可是我的C盘啊,合计才119GB的SSD空 ...

  8. FFT字符串匹配

    本文半原创 参考资料:其实就是照抄的什么参考啊 我们知道KMP可以用来在线性复杂度内进行制胡窜匹配 今天教您一种新方法:用FFT进行字符串匹配 您可能觉得这很玄学,FFT不是做多项式卷积的吗,怎么还可 ...

  9. 10.19 qbxt国庆day3

    最近的题都莫名简单 经常AK 炼金术 [问题描述] 即使是最伟大的ACM选手也是需要足够的金钱来把妹的的.于是ZYB发明了一台炼金机器. 这台机器一共有三个功能: 1.能把a位沙子变成b位石油. 2. ...

  10. cmake相关问题

    一.cmake升级 在ubuntu 16.04下面把cmake 由 3.5.1升级到 3.11,具体的流程如下所述. (1) sudo apt-get install build-essential ...