JAVA从入门到精通之SpringCloud-Eureka注册中心
沉沙 2019-08-07 来源 : 阅读 1078 评论 0

摘要:本篇文章探讨了JAVA从入门到精通之SpringCloud-Eureka注册中心,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了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

JAVA从入门到精通之SpringCloud-Eureka注册中心

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}""
        }
    }
}

JAVA从入门到精通之SpringCloud-Eureka注册中心

添加注册中心的依赖

dependencies{
   implementation 'org.springframework.cloud:spring-cloud-starter-eureka-server'}
 

注册中心启动类

JAVA从入门到精通之SpringCloud-Eureka注册中心

@SpringBootApplication
@EnableEurekaServer //表示这个项目为eureka的注册中心public class EurekaApplication {    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

JAVA从入门到精通之SpringCloud-Eureka注册中心

注册中心Yaml文件

JAVA从入门到精通之SpringCloud-Eureka注册中心

server:
  port: 8085spring:
  application:
    name: register-center
eureka:
  client:
    register-with-eureka: false #启动时不注册
    fetch-registry: false #不向注册中心拉去数据
  server:
    enable-self-preservation: false #关闭自我保护

JAVA从入门到精通之SpringCloud-Eureka注册中心

启动注册中心,端口号为8085

这个为Eureka的信息页面 可以看到这个时候 Instances currently registered with Eureka里面是No instances available 也就是这个时候还没有服务注册进来,下面我们写注册方,也就是客户端

客户端的启动类

JAVA从入门到精通之SpringCloud-Eureka注册中心

@SpringBootApplication
@EnableEurekaClient //它是eureka客户端也就是服务public class ShoppingMallApplication {    
    public static void main(String[] args) {
        SpringApplication.run(ShoppingMallApplication.class,args);
    }
}

JAVA从入门到精通之SpringCloud-Eureka注册中心

 客户端的yaml

JAVA从入门到精通之SpringCloud-Eureka注册中心

server:
  port: 8086spring:
  application:
    name: shopping-mall
eureka:
  client:
    service-url:
      defaultZone: //localhost:8085/eureka/

JAVA从入门到精通之SpringCloud-Eureka注册中心

 此时也要添加子项目的依赖

另外必须是指定注册中心的端口号,往里面注册服务

重新访问刷新注册中心就可以看到一个服务注入进来,solr服务类照葫芦画瓢

这个就是实现了 注册也发现,那我们紧接这 如何实现服务与服务之间调用呢?我现在想project-shopping-mall模块的controller调用solr的controller如何实现呢?

JAVA从入门到精通之SpringCloud-Eureka注册中心

@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"";
    }
}

JAVA从入门到精通之SpringCloud-Eureka注册中心

这个为调用solr的controller根据名字调用

JAVA从入门到精通之SpringCloud-Eureka注册中心

@RestControllerpublic class SolrController {
    @RequestMapping(""/solrSear"")    public String solrSear(){        return ""从solr查询到数据"";
    }
}

JAVA从入门到精通之SpringCloud-Eureka注册中心

意思就是说 我在shop里调用solr的controller他会返回一个从solr查询到数据

这里还需要添加一个依赖

JAVA从入门到精通之SpringCloud-Eureka注册中心

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'}

JAVA从入门到精通之SpringCloud-Eureka注册中心

shop模块里有thymeleaf模板展示数据,这个是我们的index页面

JAVA从入门到精通之SpringCloud-Eureka注册中心

<!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
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程