沉沙
2019-08-07
来源 :
阅读 1681
评论 0
摘要:本篇文章探讨了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知识库!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号