摘要:本篇文章探讨了JAVA从入门到精通之SpringCloud-Eureka注册中心,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。
本篇文章探讨了JAVA从入门到精通之SpringCloud-Eureka注册中心,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。
什么是微服务,分布式?
分布式:不同的模块部署在不同的服务器上,可以更好的解决网站高并发。
微服务:架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的跟严格执行 SOA到微服务架构的演进过程。简单的说把项目拆分成各各模块,用注册中心的方式把服务都链接在一起
服务提供者:提供服务被人调用
消费者:调用服务
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
环境搭建:
本次环境用Gradle+IDEA
1.先搭建注册中心
主项目Gradle
group 'com.wang'version = '0.0.1-SNAPSHOT'apply plugin: 'java'sourceCompatibility = 1.8buildscript { ext {//定义一个变量,统一规定springboot的版本 springBootVersion = '1.5.10.RELEASE' } repositories { maven { url '//maven.aliyun.com/nexus/content/groups/public/' } jcenter() mavenCentral() //Spring repo maven { url ""//repo.spring.io/snapshot"" } maven { url ""//repo.spring.io/milestone"" } maven { url ""//repo.spring.io/release"" } maven { url '//repo.spring.io/plugins-snapshot' } } dependencies {//用来打包 classpath(""org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"") } }//设定当前所有的项目的配置allprojects { group 'com.ssx' version = '0.0.1-SNAPSHOT' ext { springCloudVersion = 'Edgware.SR2' } repositories { maven { url '//maven.aliyun.com/nexus/content/groups/public/' } jcenter() mavenCentral() //Spring repo maven { url ""//repo.spring.io/snapshot"" } maven { url ""//repo.spring.io/milestone"" } maven { url ""//repo.spring.io/release"" } maven { url '//repo.spring.io/plugins-snapshot' } } }//设定当前模块项目中的配置subprojects { apply plugin: 'java' apply plugin: 'idea' apply plugin: 'spring-boot' dependencies { //使用springboot-web组件,但是排除tomcat组件 compile('org.springframework.boot:spring-boot-starter-web') { exclude module: ""spring-boot-starter-tomcat"" } //使用undertow作为应用服务,作为servlet容器 compile 'org.springframework.boot:spring-boot-starter-undertow' //使用健康检查组件 compile 'org.springframework.boot:spring-boot-starter-actuator' testCompile( group: 'junit', name: 'junit', version: '4.12' ) } dependencyManagement { imports { //加上此配置后,如果需要引用springcloud的组件,就不需要再提供版本信息 mavenBom ""org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"" } } }
添加注册中心的依赖
dependencies{ implementation 'org.springframework.cloud:spring-cloud-starter-eureka-server'}
注册中心启动类
@SpringBootApplication @EnableEurekaServer //表示这个项目为eureka的注册中心public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class,args); } }
注册中心Yaml文件
server: port: 8085spring: application: name: register-center eureka: client: register-with-eureka: false #启动时不注册 fetch-registry: false #不向注册中心拉去数据 server: enable-self-preservation: false #关闭自我保护
启动注册中心,端口号为8085
这个为Eureka的信息页面 可以看到这个时候 Instances currently registered with Eureka里面是No instances available 也就是这个时候还没有服务注册进来,下面我们写注册方,也就是客户端
客户端的启动类
@SpringBootApplication @EnableEurekaClient //它是eureka客户端也就是服务public class ShoppingMallApplication { public static void main(String[] args) { SpringApplication.run(ShoppingMallApplication.class,args); } }
客户端的yaml
server: port: 8086spring: application: name: shopping-mall eureka: client: service-url: defaultZone: //localhost:8085/eureka/
此时也要添加子项目的依赖
另外必须是指定注册中心的端口号,往里面注册服务
重新访问刷新注册中心就可以看到一个服务注入进来,solr服务类照葫芦画瓢
这个就是实现了 注册也发现,那我们紧接这 如何实现服务与服务之间调用呢?我现在想project-shopping-mall模块的controller调用solr的controller如何实现呢?
@SpringBootApplication @EnableEurekaClient //它是eureka客户端也就是服务public class ShoppingMallApplication { @Bean @LoadBalanced public RestTemplate restTemplate(){ RestTemplate template=new RestTemplate(); return template; //表示网络请求 } public static void main(String[] args) { SpringApplication.run(ShoppingMallApplication.class,args); } } @Controllerpublic class ShopController { @Autowired RestTemplate restTemplate; @RequestMapping(""/toIndex"") public String toIndex(Model model){ String msg=restTemplate.getForEntity(""//SOLR/solrSear"",String.class).getBody(); model.addAttribute(""msg"",msg); return ""index""; } }
这个为调用solr的controller根据名字调用
@RestControllerpublic class SolrController { @RequestMapping(""/solrSear"") public String solrSear(){ return ""从solr查询到数据""; } }
意思就是说 我在shop里调用solr的controller他会返回一个从solr查询到数据
这里还需要添加一个依赖
dependencies{ implementation 'org.springframework.cloud:spring-cloud-starter-eureka-server' // https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf'}
shop模块里有thymeleaf模板展示数据,这个是我们的index页面
<!DOCTYPE html> <html lang=""en""> <head> <meta charset=""UTF-8""/> <title>Title</title> </head> <body> <h1>欢迎进入商场</h1> <span th:text=""${msg}""></span> </body> </html>
可以看到我们成功拿到了数据
本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号