Spring Cloud Eureka 学习记录
SpringCloud
版本
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
1.1 Eureka Server
引入SpringCloud
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-parent</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--引入SpringCloud依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
新建 Module:fly-services-discovery
添加Dependency
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
编写入口类,加上@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryApplication.class,args);
}
}
resources
中添加application.yml
server:
port: 8761
security:
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8761/eureka
启动项目,访问:http://localhost:8761/
注意事项
SpringCloud
版本问题,要注意和SpringBoot
相应的版本兼容。SpringBoot
版本:2.1.3.RELEASE
.SpringCloud
版本:Finchley.RELEASE
1.2 Eureka Client
新建 Module:fly-user-service
添加Dependency
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
编写入口类,这里不需要加上@EnableEurekaClient
。新版的会默认将此服务作为Eureka Client
.
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class,args);
}
}
resources
中添加application.yml
server:
port: 8081
spring:
application:
name: fly-user-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka
instance:
prefer-ip-address: true
instanceId: ${spring.application.name}:${spring.application.instance_id:${server.port}}
启动项目.再次访问http://localhost:8761. FLY-USER-SERVICE
已经注册上。
1.3 Eureka Client Matadata
在Eureka Client
中新建RestController
,注入o.s.cloud.client.discovery.DiscoveryClient
,通过调用getInstances(serviceId)
返回matadata
信息
@RestController
@RequestMapping("/api")
public class UserServiceController {
@Value("${spring.application.name}")
private String serviceId;
@Autowired
private DiscoveryClient discoveryClient;
/**
* 获取用户服务的详细信息
* */
@GetMapping("/user-service")
public List<ServiceInstance> userServiceInfo(){
return this.discoveryClient.getInstances(serviceId);
}
}
修改application.yml
,增加matadata
instance:
prefer-ip-address: true
metadata-map:
# 这里自定义,些什么都可以 key/value
description: 用户微服务:包含用户基础信息接口,账户接口等
运行程序,访问:http://localhost:8081/api/user-service
[{
"host": "192.168.157.1",
"port": 8081,
"metadata": {
"description": "用户微服务:包含用户基础信息接口,账户接口等",
"management.port": "8081",
"jmx.port": "52681"
},
"secure": false,
"uri": "http://192.168.157.1:8081",
"instanceInfo": {
"instanceId": "fly-user-service:8081",
"app": "FLY-USER-SERVICE",
"appGroupName": null,
"ipAddr": "192.168.157.1",
"sid": "na",
"homePageUrl": "http://192.168.157.1:8081/",
"statusPageUrl": "http://192.168.157.1:8081/actuator/info",
"healthCheckUrl": "http://192.168.157.1:8081/actuator/health",
"secureHealthCheckUrl": null,
"vipAddress": "fly-user-service",
"secureVipAddress": "fly-user-service",
"countryId": 1,
"dataCenterInfo": {
"@class": "com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo",
"name": "MyOwn"
},
"hostName": "192.168.157.1",
"status": "UP",
"overriddenStatus": "UNKNOWN",
"leaseInfo": {
"renewalIntervalInSecs": 30,
"durationInSecs": 90,
"registrationTimestamp": 1551449194524,
"lastRenewalTimestamp": 1551449194524,
"evictionTimestamp": 0,
"serviceUpTimestamp": 1551448771780
},
"isCoordinatingDiscoveryServer": false,
"metadata": {
"description": "用户微服务:包含用户基础信息接口,账户接口等",
"management.port": "8081",
"jmx.port": "52681"
},
"lastUpdatedTimestamp": 1551449194524,
"lastDirtyTimestamp": 1551449194336,
"actionType": "ADDED",
"asgName": null
},
"serviceId": "FLY-USER-SERVICE",
"scheme": null
}]
1.4 Eureka Authentication
在fly-services-discovery
项目中添加引用
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
修改配置文件application.yml
,增加以下配置:
spring:
security:
user:
name: panzi
password: 123456
将defaultZone
改为http://user:password@host:port/eureka
格式
defaultZone: http://panzi:123456@localhost:${server.port}/eureka
这里需要注意的是,在高版本中,Eureka Client
并不能成功注册,会出现401错误.所以还需要在服务端增加配置类:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//关闭csrf
http.csrf().ignoringAntMatchers("/eureka/**");
//开启认证
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
修改Eureka Client:fly-user-service
的配置文件,将defaultZone
改为上文中的地址:
defaultZone: http://panzi:123456@localhost:${server.port}/eureka
启动服务端和客户端:访问http://localhost:8761/
1.5 Eureka High Availability
搭建Eureka Server
高可用,本机模拟先将hosts
修改,windows下:C:\Windows\System32\drivers\etc
127.0.0.1 eureka1 eureka2
增加 application-eureka1.yml
spring:
application:
name: eureka-server
profiles: eureka1
server:
port: 8761
eureka:
instance:
hostname: eureka1
client:
service-url:
# server1 注册到server2上
defaultZone: http://panzi:123456@eureka2:8762/eureka/
register-with-eureka: true
增加 application-eureka2.yml
spring:
application:
name: eureka-server
profiles: eureka2
server:
port: 8762
eureka:
instance:
hostname: eureka2
client:
service-url:
# server2 注册到server1 上
defaultZone: http://panzi:123456@eureka1:8761/eureka/
register-with-eureka: true
分别执行两个命令启动服务
java -jar fly-services-discovery-1.0-SNAPSHOT.jar --spring.profiles.active=eureka1
java -jar fly-services-discovery-1.0-SNAPSHOT.jar --spring.profiles.active=eureka2
启动成功之后,输入用户名和密码
修改Eureka Client
的配置文件
defaultZone:http://panzi:123456@eureka1:8761/eureka/,http://panzi:123456@eureka2:8762/eureka/
运行Eureka Client
,访问:http://eureka1:8761/,http://eureka2:8761/
原文地址:https://github.com/fanpan26/Fly.SpringCloud/wiki
项目地址:https://github.com/fanpan26/Fly.SpringCloud
Spring Cloud Eureka 学习记录的更多相关文章
- Spring Cloud Eureka(一): 开篇说明及目录汇总
开篇简述 基于Spring Boot 和 Spring Cloud 的微服务应用,本人在工作中已经使用两年有余了,伴随着个人学习计划的实施,希望借助博文的方式,将工作中使用到的技术点体系化的总结出来, ...
- spring cloud(学习笔记)高可用注册中心(Eureka)的实现(二)
绪论 前几天我用一种方式实现了spring cloud的高可用,达到两个注册中心,详情见spring cloud(学习笔记)高可用注册中心(Eureka)的实现(一),今天我意外发现,注册中心可以无限 ...
- spring cloud深入学习(四)-----eureka源码解析、ribbon解析、声明式调用feign
基本概念 1.Registe 一一服务注册当eureka Client向Eureka Server注册时,Eureka Client提供自身的元数据,比如IP地址.端口.运行状况指标的Uri.主页地址 ...
- Spring Cloud 学习 之 Spring Cloud Eureka(源码分析)
Spring Cloud 学习 之 Spring Cloud Eureka(源码分析) Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 ...
- 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...
- spring cloud深入学习(二)-----服务注册中心spring cloud eureka
服务治理 主要用来实现各个微服务实例的自动化注册与发现,为啥需要这玩意呢?在一开始比如A系统调用B服务,可能通过手工维护B服务的实例,并且还得采用负载均衡等方式,这些全部都得需要手工维护,等后面系统越 ...
- Spring Cloud 学习 之 Spring Cloud Eureka(概述)
Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 前述: 服务治理可以说是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务 ...
- 《Spring Cloud》学习(一) 服务治理!
前言:之前网上学习过Spring Cloud,对于工作上需要是足够了,总归对于一些方面一知半解,最近难得有些闲暇时间,有幸读了崔永超先生的<Spring Cloud 微服务实战>,一方面记 ...
- Spring Cloud Eureka 实践(一)
Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,主要在Spring Cloud架构中提供服务注册发现的功能.那么是不是可以尝试在本地搭一个单例Eu ...
随机推荐
- WinForm窗体多线程操作实例
最近在学习C# 多线程相关知识,这块一直比较薄弱,在网上查了一下资料,学习了一下前辈们的经验,小弟自己也比葫芦画瓢的写了一个,自学一下. 代码如下 using System; using System ...
- 使用JavaScript动态更改CSS样式
在很多情况下,都需要对网页上元素的样式进行动态的修改.在JavaScript中提供几种方式动态的修改样式,下面将介绍方法的使用.效果.以及缺陷. 1.使用obj.className来修改样式表的类名. ...
- Difference between model.evaluate vs model.predict in Keras
The model.evaluate function predicts the output for the given input and then computes the metrics ...
- Java并发编程指南
多线程是实现并发机制的一种有效手段.在 Java 中实现多线程有两种手段,一种是继承 Thread 类,另一种就是实现 Runnable/Callable 接口. java.util.concurre ...
- 润乾在东方通tongweb5.0上部署手册
作为国内领先的中间件开发商,东方通是国内最早研究J2EE技术和开发应用服务器产品的厂商.应用服务器TongWeb的开发目标,是利用公司在中间件 领域的技术优势,实现符合J2EE规范的企业应用支撑 ...
- CDH5.11安装spark2.x详细步骤
简介: 在我的CDH5.11集群中,默认安装的spark是1.6版本,这里需要将其升级为spark2.x版本.经查阅官方文档,发现spark1.6和2.x是可以并行安装的,也就是说可以不用删除默认的1 ...
- 8 tensorflow修改tensor张量矩阵的某一列
1.tensorflow的数据流图限制了它的tensor是只读属性,因此对于一个Tensor(张量)形式的矩阵,想修改特定位置的元素,比较困难. 2.我要做的是将所有的操作定义为符号形式的操作.也就是 ...
- [转载]敏感词过滤,PHP实现的Trie树
原文地址:http://blog.11034.org/2012-07/trie_in_php.html 项目需求,要做敏感词过滤,对于敏感词本身就是一个CRUD的模块很简单,比较麻烦的就是对各种输入的 ...
- 分别用C/C++ 和 C#实现简单的观察者模式
网上找了很多关于观察者模式的代码例子和文章,都写的比较复杂,我个人还是喜欢从易到难,今天自己参考网上资料,也写了一个简单观察者模式的例子,简单的复习了一下Observer 模式,Observer 模式 ...
- C++ 入门随手笔记及联系
一.第一个C++程序 1.文件扩展名 C++源代码的文件扩展名.cpp.C.cxx.c(需要指定编译语言) 自定义的头文件依然保留.h 2.头文件 C++标准库的头文件不带.h,最常用的是ios ...