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

  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. java代理模式实例讲解

    下面这个是设计模式课上的例子: import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import ...

  2. JS万金油的类型判断方法

    Object.prototype.toString.call(data).slice(8, -1).toLowerCase();

  3. WP8.1&UWP手机设备对状态栏操作

    改UWP和WP8.1手机设备的状态栏.首先先说较为普遍的WP8.1设备:首先添加引用:using Windows.UI.ViewManagement;其次就可以使用StatusBar了,它提供了以下方 ...

  4. Python3 简单的三级列表思路

    Python3 简单的三级列表思路(初学者 比较low) 代码如下: info = { '北京':{ '沙河':['benz','momo'], '朝阳':['北土城','健德门'], '国贸':[' ...

  5. [CentOS7] 设置语言环境

    博主想要将英文环境(en_US.UTF-8)改为中文环境(zh_CN.UTF-8),有两种解决方法 一.临时解决方法 使用LANG=“zh_CN.UTF-8”,这个命令来实现,不过在重新登录的时候又会 ...

  6. zancun

    #include<iostream> #include<cstdio> using namespace std; ; int n; int avai[maxn], need[m ...

  7. CI框架源码学习笔记5——Hooks.php

    接着Benchmark.php往下看,下一个引入的文件是Hooks.php,我们称之为钩子.它的目的是在不改变核心文件的基础上,来修改框架的内部运作流程.具体使用方法参见手册http://codeig ...

  8. sap程序下载

    有时需要下载sap 中的程序   一屏一屏的拷贝非常麻烦 这里是在网上找的的一个下载工具   实际就是一个sap程序   建立好sap程序 把代码拷贝进去 在参数处输入程序名字  和下载位置  F8运 ...

  9. git 打tag

    查看已有tag git tag 创建新的tag git tag <version or tagname> -m <tag description> 例如创建一个版本1.0.0的 ...

  10. [国家集训队]特技飞行 贪心BZOJ2697

    题目背景 1.wqs爱好模拟飞行. 2.clj开了一家神犇航空,由于clj还要玩游戏,所以公司的事务由你来打理. 注意:题目中只是用了这样一个背景,并不与真实/模拟飞行相符 题目描述 神犇航空开展了一 ...