上面学习到了如何由一个程序访问另一个程序,那么如果使用SpringCloud来进行访问,该如何访问呐?

可以借助Eureka服务发现组件进行访问。

可以借助官方文档:https://spring.io/projects/spring-cloud 。  中文文档:https://springcloud.cc/

Eureka

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现。Eureka 采用了 C-S 的设计架构。Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。Spring Cloud 的一些其他模块(比如Zuul)就可以通过 Eureka Server 来发现系统中的其他微服务,并执行相关的逻辑。

Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。

上图是github了Eureka的基本架构:Eureka Server提供服务注册和发现。其他的应用客户端。

SpringCloud的Eureka服务

1.将项目变成 SpringCloud项目,父容器添加依赖。

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Brixton.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

2.新建一个eureke的maven工程eureka-server项目。

<?xml version="1.0" encoding="UTF-8"?>

<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springclouddemo</artifactId>
<groupId>com.aomeibox</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>eureka</artifactId> <name>eureka</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency> <!-- eureka-server 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
<!-- 安全依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies> </project>

配置主函数,设置成Eureka Server,并启动项目并运行。

@SpringBootApplication
@EnableEurekaServer
public class EurekaApp
{
public static void main( String[] args )
{
SpringApplication.run(EurekaApp.class);
}
}

访问eureka的时候需要输入用户名和密码,默认用户名是user,密码则需要从控制台查找,SpringCloud生成了一个随机默认的。

如果需要修改用户名和密码,则需要重新配置application.yml文件中的信息。

server:
port: 10000 #以为当前的eureka是单机的,所以需要设置一些配置
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://root:123@localhost:10000/eureka
# defaultZone: http://192.168.1.125:10000/eureka/ security:
basic:
enabled: true #开启安全配置,也就是需要安全密码,如果不需要,设置为false即可,注意,这个参数必须放在application.yml中,不允许放在bootstrap.yml中
user:
name: root
password: 123 #在配置了用户的用户名和密码后,可以修改访问地址为curl风格

消费者和服务提供者注册到Eureka中

1.修改provider项目的pom.xml文件。

    <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>1.4.0.RELEASE</version>
</dependency> <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> </dependencies>

2.修改主函数。

@SpringBootApplication
@EnableEurekaClient //启用 eureka 客户端
public class ProviderUser
{
public static void main( String[] args ) {
SpringApplication.run(ProviderUser.class);
}

3.启动eureka服务和provider,可以看到已经注册到Eureka中了。

4.编写conroller类,进行测试

@RestController
public class UserController { @Autowired
private EurekaClient eurekaClient;
@GetMapping("/user/{id}")
public User getUser(@PathVariable Integer id){
return new User(id);
} @GetMapping("/eurekaInfo")
public String info(){
InstanceInfo eureka = eurekaClient.getNextServerFromEureka("provider-user", false);
return eureka.getHomePageUrl();
} }

5.customr如上修改。就会有两个项目注册到Eureka中了。

6.修改customer中的controller代码。再次访问,还是能拿到provider项目提供的数据的。

@RestController
public class OrderController { @Autowired
private RestTemplate template;//spring提供的一个用于访问rest接口的模板对象
private String url = "http://192.168.1.125:7900/user/"; @Autowired
private EurekaClient eurekaClient; @GetMapping("/order/{id}")
public User getUser(@PathVariable Integer id){ InstanceInfo eureka = eurekaClient.getNextServerFromEureka("PROVIDER-USER", false); //访问提供者获取数据
User user = template.getForObject(eureka.getHomePageUrl()+"/user/"+ id, User.class);//通过访问rest 获取到json数据,然后转换成User对象 return user;
}
}

Eureka细节修改

1.修改主机服务名称。

server:
port: 7900 #程序启动后的端口 spring:
application:
name: provider-user #应用名称 eureka:
client:
serviceUrl:
defaultZone: http://root:123@localhost:10000/eureka
instance:
instance-id: provider-user7900 # 修改服务名称

注意:修改后,会自动启动Eureka 的自我保护机制。

2.访问信息有IP信息提示。

server:
port: 7900 #程序启动后的端口 spring:
application:
name: provider-user #应用名称 eureka:
client:
serviceUrl:
defaultZone: http://root:123@localhost:10000/eureka
instance:
instance-id: provider-user7900 # 修改服务名称
prefer-ip-address: true #访问路径可以显示IP地址

3.微服务info信息修改。

info:
app.name: provider
company.name: aomeibox
build.artifactId: ${project.artifactId}
build.version: ${project.version}

Eureka自我保护机制

某时刻某一个服务不可用了,Eureka并不会立刻清理,依旧会对该微服务的信息进行保存。

  默认情况下,如果EurekeServer在一定时间内没有接收到某个微服务实例的心跳,EurekaServer将会注销该服务(默认90秒)。但是当网络分区发生故障时,微服务与Eureka无法正常进行通信,以上行为就会变得非常危险--因为微服务本身是健康的,此时不应该注销这个微服务。Eureka通过”自我保护模式“来解决这个问题 --- 当EurekaServer节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,EurekaServer就会保护服务注册表中的信息,不再删除服务注册表中的数据。当网络回复后,EurekaServer节点会自动退出自我保护模式。

  在自我保护的模式中,EurekaServer会保护服务注册表中的信息,不再注销任何服务实例。当它接收的心跳次数重新恢复到阈值以上时,该EurekaServer节点会自动退出自我保护模式。

  在SpringCloud中,可以使用 eureka.server.enable-self-preservation = false 来关闭自我保护机制。

服务发现

服务中心

服务中心又称注册中心,管理各种服务功能包括服务的注册、发现、熔断、负载、降级等,比如dubbo admin后台的各种功能。

就第一个例子来说,项目A调用项目B

正常调用:

有了服务中心之后,任何一个服务都不能直接去掉用,都需要通过服务中心来调用:

Eureka的集群搭建

注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。Eureka通过互相注册的方式来实现高可用的部署,所以我们只需要将Eureke Server配置其他可用的serviceUrl就能实现高可用部署。

多节点注册中心

1、host转换,在hosts文件中加入如下配置

127.0.0.1 eureka1
127.0.0.1 eureka2
127.0.0.1 eureka3

2、创建application-1.yml,作为eureka1服务中心的配置,并将serviceUrl指向eureka2,eureka3.

3、创建application-2.yml,创建application-3.yml,分别指向另外两个。

---
spring:
application:
name: spring-cloud-eureka
profiles: eureka1
server:
port: 8001
eureka:
instance:
hostname: eureka1
client:
serviceUrl:
defaultZone: http://eureka2:8002/eureka/,http://eureka3:8003/eureka/
---
spring:
application:
name: spring-cloud-eureka
profiles: eureka2
server:
port: 8001
eureka:
instance:
hostname: eureka2
client:
serviceUrl:
defaultZone: http://eureka1:8001/eureka/,http://eureka3:8003/eureka/
---
spring:
application:
name: spring-cloud-eureka
profiles: eureka3
server:
port: 8002
eureka:
instance:
hostname: eureka3
client:
serviceUrl:
defaultZone: http://eureka1:8001/eureka/,http://eureka2:8002/eureka/

4、打包启动。依次启动完成后,浏览器输入:http://eureka1:8000/ ,http://eureka2:8000/ ,http://eureka3:8000/ 即可查看结果。

浅谈SpringCloud (二) Eureka服务发现组件的更多相关文章

  1. 第二章 SpringCloud之Eureka-Server服务发现组件

    1.Eureka简介 文档:https://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html ############### ...

  2. 服务发现组件之 — Eureka

    前言 现在流行的微服务体系结构正在改变我们构建应用程序的方式,从单一的单体服务转变为越来越小的可单独部署的服务(称为微服务),共同构成了我们的应用程序.当进行一个业务时不可避免就会存在多个服务之间调用 ...

  3. SpringCloud之Eureka 服务注册和服务发现基础篇2

    上篇文章讲解了SpringCloud组件和概念介绍,接下来讲解一下SpringCloud组件相关组件使用.原理和每个组件的作用的,它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix ...

  4. SpringCloud之Eureka服务注册与发现(一)

    一 Eureka的基本架构 Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper). Eureka 采用了 C-S 的设计架构 ...

  5. SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

    1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操 ...

  6. java框架之SpringCloud(3)-Eureka服务注册与发现

    在上一章节完成了一个简单的微服务案例,下面就通过在这个案例的基础上集成 Eureka 来学习 Eureka. 介绍 概述 Eureka 是 Netflix 的一个子模块,也是核心模块之一.Eureka ...

  7. SpringCloud接入EDAS——服务发现篇

    旁白 很久没有写技术文章了,最近不是写水文就是写小说.说到底,还是最近很少研究技术的缘故,已经到了江郎才尽的地步了. 不过,LZ无意间看到自己团队的小伙伴写的一些文章,觉得还是不错的,于是便动了心思, ...

  8. SpringCloud(一)浅谈SpringCloud

    前言 现在微服务实在是太火了,所以我们必不可少的是要学习一下SpringCloud了,服务化的核心就是将传统的一站式应用 根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享D ...

  9. SpringCloud使用Nacos服务发现实现远程调用

    本文使用SpringCloud结合Nacos服务发现,Feign远程调用做一个简单的Demo. 1 Nacos 关于Nacos之前写了两篇文章关于SpringBoot对它的使用,感兴趣可以查看一下. ...

随机推荐

  1. DB2 char长度问题

    问题:发现用char转换了后的值长度都变为了11,更长的变为了254

  2. 详解sqlserver查询表索引

    SELECT   索引名称=a.name ,表名=c.name ,索引字段名=d.name ,索引字段位置=d.colid ? 1 2 3 4 5 6 7 8 FROM  sysindexes  a ...

  3. OnLineML:时序数据挖掘

    关于时序分析: 我们跟随时间的脚步,试图解释现在.理解过去.甚至预测未来........ 原文链接:http://blog.sciencenet.cn/home.php?mod=space&u ...

  4. 关于maven-基本

    笔记 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object ...

  5. 自我介绍About me

    我的github:www.github.com/dcdcbigbig 欢迎来加star!(雾) tm就是个菜逼

  6. 设置ssh会话过期时间

    客户端配置选项: 编辑配置文件 ~/.ssh/config 加入以下配置项,如不存在新建一个即可: Host * ServerAliveInterval 300 ServerAliveCountMax ...

  7. 利用Tensorflow训练自定义数据

    很多正在入门或刚入门TensorFlow机器学习的同学希望能够通过自己指定图片源对模型进行训练,然后识别和分类自己指定的图片.但是,在TensorFlow官方入门教程中,并无明确给出如何把自定义数据输 ...

  8. ARP(地址解析协议)

    目录 1. ARP 概述 2. ARP 协议工作原理 3. ARP 缓存 4. ARP 报文格式 5. 抓包分析 5.1. ARP 请求报文 5.2. ARP 应答报文 6. 免费 ARP 7. AR ...

  9. SSH框架整合截图(二)

    客户拜访管理 1 什么是客户拜访 (1)客户:与公司有业务往来的 (2)用户:可以使用系统的人 2 用户和客户关系 (1)用户和客户之间是拜访的关系 (2)用户 和 客户 是 多对多关系 ** 一个用 ...

  10. BA-Bacnet ip 、TCP/IP

    BACENT IP TCP/IP协议