【微服务架构】SpringCloud之Eureka入门篇
什么是Eureka
官方的介绍在这里Eureka wiki。Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现。Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。
在我看来,Eureka的吸引力来源于以下几点:
- 开源:大家可以对实现一探究竟,甚至修改源码。
- 可靠:经过Netflix多年的生产环境考验,使用应该比较靠谱
- 省心 功能齐全:不但提供了完整的注册发现服务,还有Ribbon等可以配合使用的服务。
- 基于Java:对于Java程序员来说,使用起来,心里比较有底。
- Spring Cloud可以使用Spring Cloud, 与Eureka进行了很好的集成,使用起来非常方便。
项目架构
代码实现
1、实现服务注册,创建EureKaserver 项目
项目结构
pom.xml文件
<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"><modelVersion>4.0.0</modelVersion><groupId>com.fit</groupId><artifactId>EureKaserver</artifactId><version>0.0.1-SNAPSHOT</version><!-- SpringBoot父类依赖引用 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath /></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!--eureka server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka-server</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>
application.yml配置
server:port: 8888
eureka:instance:hostname: localhostclient:registerWithEureka: falsefetchRegistry: falseserviceUrl:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
EurekaServer.java文件
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {public static void main(String[] args) {SpringApplication.run(EurekaServer.class, args);}
}
服务注册搭建完成,运行访问:http://localhost:8888/
2、服务提供者,创建SpringCloud-Service
项目结构
pom.xml文件
<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"><modelVersion>4.0.0</modelVersion><groupId>comf.it</groupId><artifactId>SpringCloud-Service</artifactId><version>0.0.1-SNAPSHOT</version><!-- SpringBoot父类依赖引用 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath /></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!--eureka server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>
application.yml配置
eureka:client:serviceUrl:defaultZone: http://localhost:8888/eureka/
server:port: 8762
spring:application:name: SpringCloud-Service
UserController.java
@RestController
public class UserController {@RequestMapping(value ="getUser")public Map<String,Object> getUser(){Map<String,Object> user = new HashMap<String,Object>();user.put("name", "zlzhaoe");user.put("age", "26");return user;}
}
SpringCloudServiceApp.java
@EnableEurekaClient
@SpringBootApplication
public class SpringCloudServiceApp {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubSpringApplication.run(SpringCloudServiceApp.class, args);}
}
服务提供者SpringCloud-Service创建完成
访问:http://localhost:8762/getUser
访问:http://localhost:8888/
3、消费者,创建SpringCloud-Consumer
项目结构
pom.xml
<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"><modelVersion>4.0.0</modelVersion><groupId>com.fit</groupId><artifactId>SpringCloud-Consumer</artifactId><version>0.0.1-SNAPSHOT</version><!-- SpringBoot父类依赖引用 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version><relativePath /></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.RC1</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>
application.yml
eureka:client:serviceUrl:defaultZone: http://localhost:8888/eureka/
server:port: 8764
spring:application:name: SpringCloud-Consumer
ConsumerUserController.java
@Controller
public class ConsumerUserController {@Autowiredprivate RestTemplate restTemplate;@SuppressWarnings("unchecked")@ResponseBody@RequestMapping(value ="getServiceUser")public Map<String,Object> getServiceUser(){System.out.print("==========start");Map<String,Object> user = restTemplate.getForObject("http://SpringCloud-Service/getUser", Map.class);return user;}
}
SpringCloudConsumerApp.java
package com.fit;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@EnableEurekaClient
@SpringBootApplication
public class SpringCloudConsumerApp {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubSpringApplication.run(SpringCloudConsumerApp.class, args);}@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();}
}
*备注:在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;并且向程序的ioc注入一个bean: restTemplate;并通过@LoadBalanced注解表明这个restRemplate开启负载均衡的功能*
消费者,创建完成,运行访问http://localhost:8764/getServiceUser,返回如下图
源码下载
【微服务架构】SpringCloud之Eureka入门篇相关推荐
- 《自学SpringCloud微服务架构》之第 1 篇 —— 微服务的自我修养
序言: 我们先看看2019年中国首富排行榜.嗯,99%的财富掌握在1%的人手里.没错的,这个时代,是富豪们玩转手里的棋子的时代,而我们都是看客.本人已毕业四年,却还是一如既往的做着毕业生都能做的敲代码 ...
- 微服务架构 SpringCloud(一)组件和概念介绍
一:什么是微服务(Microservice) 微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为一系列小的Web服务.这些小的Web服务可以独立地编译及 ...
- SpringCloud一、前提概述、相关微服务和微服务架构理论知识、微服务技术栈有哪些、
①前提概述.微服务架构springcloud的相关学习. 前提知识+相关说明 1.目前,我们学习到最后的微服务架构SpringCloud,基本上需要熟悉以前的学习内容和知识:springmvc.spr ...
- PDF分享-SpringCloud+高并发+中间件+微服务架构从零开始学微服务架构
什么是微服务? 如何快速上手SpringCloud微服务系统架构+常用中间件服务 1.SOA.Webservice.Dubbo.SpringCloud究竟什么是微服务? 2.单体应用向微服务异构平台架 ...
- 基于springCloud的微服务架构设计
Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题:Spring Cl ...
- 最新微服务框架SpringCloud Alibaba介绍,搭建
微服务和SpringCloud Alibaba详细介绍(一),手把手搭建微服务框架 PS:本博客是本人参照B站博主:JAVA阿伟如是说 的视频讲解手敲整理的笔记 跟着一起手动搭建的框架 供大家一起学习 ...
- 全网最全微服务架构—Spring Cloud详解,没有比这更详细的了!
原文地址: https://blog.51cto.com/14570694/2482244 本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景 ...
- SOA架构与微服务架构到底是什么?以及对应的一些常用的框架简介
架构是逻辑上的设计模式,而框架则是具体的实现.一个架构模式上,可能会使用到多个框架. 一.架构的演变 架构的演变是根据业务量的急速扩张对技术要求不断的加深而产生的.如果细粒度的划分可以有很多路线,我一 ...
- 好家伙,阿里P8撰写的Java微服务架构全栈笔记GitHub一夜飞到榜首
Java微服务作为当下最常用的架构技术,快速实现编程开发而且维护起来十分的方便,可以简单是实现高可用,分布式开发而且也很安全! 今天给大家分享的这份<Java微服务架构全栈笔记>,用140 ...
最新文章
- Fragment 使用 show 和 hide 的方式实现切换 以及切换的时候Fragment 生命周期
- 周志华等人新著!国内第一部AI本科专业教育培养体系出炉
- 关于PHP中Session文件过多的问题
- 梦想中的网络安全和内部协作
- jit 和 jvm_关于JVM和JIT的一点点
- 【笔记】Java数据结构与算法
- 2048小游戏设计思路
- HDU 1285:确定比赛名次(拓扑排序)
- python集合类型
- 权限持久化---映像劫持检测(Shift后门)
- 什么是爬虫-Java网络爬虫系统性学习与实战(2)
- 计算机五笔打字口诀,学电脑五笔打字-不用背口诀-5分钟轻松学会五笔打字-快来试试吧!.doc...
- 预训练(pre-training/trained)与微调(fine tuning)
- CMS企业建站的经验
- 变种 背包问题_【算法设计】背包问题
- android利用EpMedia给录像添加时间水印
- 第二、三范式与BC范式的区别
- springboot项目本地运行无问题,Linux系统报错org.thymeleaf.exceptions.TemplateInputException
- Jetpack Paging3 基本使用
- 2022年下半年网络规划设计师考试下午真题
热门文章
- 伍六七带你学算法 入门篇-最小的k个数
- 2022-2028年中国加密货币交易所市场研究及前瞻分析报告
- 10任务栏全屏时老是弹出_Deepin 15.10 发布,深度操作系统
- 2022-2028年中国丁晴橡胶行业市场深度分析及投资规划分析报告
- Pytorch: 命名实体识别: BertForTokenClassification/pytorch-crf
- LeetCode简单题之解码字母到整数映射
- LeetCode简单题之找到最近的有相同 X 或 Y 坐标的点
- 端到端TVM编译器(上)
- 深度学习在计算机视觉中的应用长篇综述
- 2021年大数据Flink(十五):流批一体API Connectors ​​​​​​​Kafka