微架构 springcloud-08. 初识Eureka

Eureka

何为 Eureka?

简单来说Eureka 就是一个服务管理中心。

思考:在现实的开发逻辑中,我们把所有的逻辑通通都写到一个工程下,那么我们的项目会成什么样子?成千上万个Java文件都在一个目录下,各种资源文件堆叠在一起,这就像把不同年级的学生都统一到一个超大的教室上课;这就对我们的项目管理造成了很大的困难,甚至是阻碍,那么能不能把逻辑拆分以下,projectA 负责一部逻辑,ProjectB 负责一部分逻辑、projectC ……,然后让各个逻辑之间能够互相调用、通信!但管理有事相互独立的;就像一个企业,有人事部、财务部、研发部、销售部和董事会……

那么,Eureka 就是各个部门相互通信的基站!它负责各个project间的联络与通信!

image

代码实现步骤:

  1. 新建Eureka服务中心
  2. 新建App1
  3. 新建App2

目的:使 App1、App2 能相互通信!

1. 创建Eureka服务中心

01 idea 创建一个maven Java项目 EurekaService!导入如下依赖:

 <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>
</dependencies>

02 创建resources/application.properties 配置文件,并添加如下配置:

#启动端口改为 8761
server.port=8761
# 关闭默认注册到eureka服务中心(该项目本身就是服务中心,无需自己注册自己)
eureka.client.register-with-eureka=false
# 关闭自动抓取服务端,该工程本身就是服务端
eureka.client.fetch-registry=false

03 创建启动类 person.jack.eureka/EurekaService

package person.jack.eureka;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer /**声明该启动是一个Eureka服务端*/
public class EurekaService {
    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaService.class).web(true).run(args);
    }
}

# 运行main() 方法,启动Eureka服务端
……

浏览器访问:http://localhost:8761

# 进入Eureka 首页
……

# 停止服务

2. 创建Eureka 客户端工程AppOne

01 创建一个maven java 工程AppOne,导入如下依赖:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>

02 创建启动类,person.jack/Appone:

package person.jack;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class AppOne {
    public static void main(String[] args) {
        new SpringApplicationBuilder(AppOne.class).web(true).run(args);
    }
}

03 创建person.jack.controller/HelloController:

package person.jack.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @ResponseBody
    @RequestMapping(value = "/sayMesg/{word}")
    public String sayMesg(@PathVariable String word){
        return "你传了一个:" + word ;
    }
}

04 添加配置文件application.properties:

# 应用名称
spring.application.name=AppOne
# eureka服务端地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

05 启动Eureka 服务端EurekaService、启动客户端AppOne

# 观察服务端是否正常启动
……

# 观察AppOne 是否能正常启动
……

06 启动成功后,访问服务端:http://localhost:8761/

Instances currently registered with Eureka

Application AMIs Availability Zones Status
APPONE n/a (1) (1) UP (1) - LAPTOP-TJDLNJHK:AppOne

AppOne 成功注册到Eureka服务中心

创建第二个客户端AppTwo

  1. 新建第二个客户端AppTwo,相关依赖同Appone相同:
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
</dependencies>
  1. 创建application.properties:
# 应用名称
spring.application.name=AppTwo
# eureka服务端地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
  1. pom.xml 新加入依赖:
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
  1. 创建启动类 person.jack/AppTwo
package person.jack;

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
public class AppTwo {
    public static void main(String[] args) {
        new SpringApplicationBuilder(AppTwo.class).web(true).run(args);
    }
}
  1. 创建配置工具类 person.jack.config/MyConfig,将RestTemplate 配置到IOC容器:
package person.jack.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class MyConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
  1. 创建 person.jack.controller/AppTwoHello
package person.jack.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class AppTwoHello {

    @Autowired
    private RestTemplate restTemplate;

    @ResponseBody
    @RequestMapping("/getAppOneMesg/{mesg}")
    public String getAppOneMesg(@PathVariable String mesg){
        String strMesg=restTemplate.getForObject("http://APPONE/sayMesg/" + mesg, String.class);
        return "访问App2,从App1 收到信息:“"+strMesg+"“";
    }
}
  1. AppTwo 代码编写完成!依次启动EurekaService、AppOne、AppTwo
# 注意观察服务是否成功启动

调用测试

  1. 访问Eureka 服务中心: http://localhost:8761/

页面打印

Instances currently registered with Eureka

Application AMIs Availability Zones Status
APPONE n/a (1) (1) UP (1) - LAPTOP-TJDLNJHK:AppOne
APPTWO n/a (1) (1) UP (1) - LAPTOP-TJDLNJHK:AppTwo:8081

现在,Eureka服务中心已经有了两个应用了!

  1. 访问 http://localhost:8081/getAppOneMesg/hello ,测试是否能连通AppOne
# 页面打印
访问App2,从App1 收到信息:“你传了一个:hello“

# 访问成功!AppTwo 成功连通、并调用AppOne

测试成功!第一个Euraka 环境搭建完成!

本章,完!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容