相信看过 每天学点SpringCloud(一):简单服务提供者消费者调用的同学都发现了,在最后消费者调用提供者的时候把提供者的地址硬编码在了代码中,这样的方式肯定是不行的,今天,我们就是要Eureka来解决这个问题

创建Eureka服务

1.我们在原先项目的基础上再新建一个项目cloud-demo-eureka

此项目的依赖为

<?xml version="1.0" encoding="UTF-8"?>
<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">
<parent>
<artifactId>spring-cloud-demo</artifactId>
<groupId>cn.org.zhixiang</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>cloud-demo-eureka</artifactId> <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>
<!--注意此处的依赖是SpringBoot2.0以后专用的,如果您使用的SpringBoot版本低于2.0请使用spring-cloud-starter-eureka-server-->
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

2.创建application.yml

spring:
application:
name: eureka-server
#开启权限认证
security:
basic:
enabled: true
user:
name: root
password: root server:
host: localhost
port: 8761
eureka:
client:
#此项目不作为客户端注册
register-with-eureka: false
fetch-registry: false
service-url:
#开启权限验证后Eureka地址为 用户名:密码@地址:端口号,如未开启权限验证则直接使用 地址:端口号
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${server.host}:${server.port}/eureka

3.创建cn.org.zhixiang包,在此包下创建CloudDemoEureApplication启动类

package cn.org.zhixiang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication
@EnableEurekaServer
public class CloudDemoEureApplication {
public static void main(String[] args) {
SpringApplication.run(CloudDemoEureApplication.class, args);
}
}

4.如果您开启了权限验证并且SpringBoot版本为2.0以上的话还需要一个操作,如果不是此布可以忽略

因为2.0默认开启了csrf,如果我们现在直接启动Eureka服务的话客户端是注册不上的,所以需要把csrf关闭

在cn.org.zhixiang包下新建security包,新建WebSecurityConfigurer类

@EnableWebSecurity
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
super.configure(http);
}
}

5.在CloudDemoEureApplication启动类中启动Eureka服务,浏览器访问http://localhost:8761/eureka,输入用户名root和密码root登陆Eureka后Eureka服务创建成功。

修改服务提供者

1.在原先的cloud-demo-provider项目中添加Eureka依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.修改application.yml,增加以下配置

eurekaServer:
host: localhost
port: 8761
user: root
password: root eureka:
client:
#将此项目注册到Eureka服务
register-with-eureka: true
service-url:
defaultZone: http://${eurekaServer.user}:${eurekaServer.password}@${eurekaServer.host}:${eurekaServer.port}/eureka

3.在CloudDemoProviderApplication启动类中增加一个注解:@EnableEurekaClient标示此项目是Eureka客户端

4.紧接着先启动刚才创建的Eureka服务再启动此项目,当我们再次访问Eureka的时候可以发现我们的项目已经注册上了Eureka

5.因为我们此次需要玩点高大上的了,所以只有一个服务提供者肯定是不行的,我们copy一下上方的cloud-demo-provider项目,新项目命名为cloud-demo-provider-2,这个新项目需要修改的地方只有三个:

第一是pom文件中的项目id注意不要与上个项目一样,推荐直接叫做cloud-demo-provider-2.

第二是yml文件中spring.application.name应该是与上个项目都一样的,名字叫做:provider-demo。这个不做修改,只需要修改server.port,保证端口不会冲突,比如我改成了8079

第三是UserController,可以看到上个项目返回的User是硬编码的叫做张三的,这次这个项目我们把这个张三修改成李四,来区分这两个项目

修改完毕以后启动项目Eureka中应该是这样的

就是这个provider-demo的服务有两个提供者的意思

修改消费者

现在我们已经开始修改上次服务地址硬编码的问题了

1.cloud-demo-consumer项目增加Eureka依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.启动类中增加了两个注解

@SpringBootApplication
@EnableEurekaClient
public class CloudDemoConsumerApplication {
@Bean
@LoadBalanced//开启负载均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(CloudDemoConsumerApplication.class, args);
}
}

3.在UserController中做一下改变

@RestController
@RequestMapping("/user")
public class UserController { @Autowired
private RestTemplate restTemplate; @GetMapping("/getUser/{id}")
public User getUser(@PathVariable Long id){
return restTemplate.getForObject("http://provider-demo/user/getUser/"+id,User.class);
}
}

可以看到,我们上次使用的localhost:8078/user/getUser已经换成了provider-demo/user/getUser了。不知道大家还记不记得这个provider-demo么?它呢,是两个项目中spring.application.name的属性值,在Eureka中呢,就对应着一个服务的id,也就是说在Eureka中,我们可以不使用ip+端口而是使用Ip去访问服务。

大家将这四个项目都启动起来以后,访问http://localhost:8088/user/getUser/5,是不是发现一会会返回张三,一会会返回李四呢。这个就是我们一开始加的@LoadBalanced注解,也就是开启了Eureka的负载均衡。这样的话我们是不是已经完美的完成了昨天遗留的问题呢?

GitHub:https://github.com/shiyujun/spring-cloud-demo

如果对您有所帮助,请记得帮忙点一个star哦

本文出自https://zhixiang.org.cn/#/blog/read/3e9e73fd-bda0-4638-826b-cceb43b77b07,转载请保留。

每天学点SpringCloud(二):服务注册与发现Eureka的更多相关文章

  1. SpringCloud(二) 服务注册与发现Eureka

    1.eureka是干什么的? 上篇说了,微服务之间需要互相之间通信,那么通信就需要各种网络信息,我们可以通过使用硬编码的方式来进行通信,但是这种方式显然不合适,不可能说一个微服务的地址发生变动,那么整 ...

  2. SpringCloud(2) 服务注册和发现Eureka Server

    一.简介 EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现.Netflix在设计EureKa时遵循着AP原则,它基于REST的服务,用于定位服务,以实现云端中间层服务发现 ...

  3. SpringCloud之服务注册与发现Eureka(一)

    Eureka是Spring Cloud Netflix微服务套件中的一部分,可以与Springboot构建的微服务很容易的整合起来.Eureka包含了服务器端和客户端组件.服务器端,也被称作是服务注册 ...

  4. SpringCloud之服务注册与发现Eureka+客户端Feign

    前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. Eureka 作为注册中心,是 SpringCloud 体系中最重要最核心的组件之一. Feign 使用接口加注解的方式调用服务,配合 ...

  5. Spring Cloud(二):服务注册与发现 Eureka【Finchley 版】

    Spring Cloud(二):服务注册与发现 Eureka[Finchley 版]  发表于 2018-04-15 |  更新于 2018-05-07 |  上一篇主要介绍了相关理论,这一篇开始我们 ...

  6. SpringCloud - 2. 服务注册 和 发现

    SpringCloud 的服务注册和发现是由Eureka来完成. 1.eureka server 1.1 依赖 <dependency> <groupId>org.spring ...

  7. 小D课堂 - 新版本微服务springcloud+Docker教程_3-05 服务注册和发现Eureka Server搭建实战

    笔记 5.服务注册和发现Eureka Server搭建实战     简介:使用IDEA搭建Eureka服务中心Server端并启动,项目基本骨架介绍          官方文档:http://clou ...

  8. spring cloud 学习之 服务注册和发现(Eureka)

    一:服务注册和发现(Eureka) 1:采用Eureka作为服务注册和发现组件 2:Eureka 项目中 主要在启动类加上 注解@EnableEurekaServer @SpringBootAppli ...

  9. SpringCloud 学习(二) :服务注册与发现Eureka

    Spring Cloud应用中可以支持多种的服务治理框架,比如Eureka.Consul.Zookeeper等,现在我们用的是consul,本文以SpringCloud Dalston.SR5版本介绍 ...

  10. SpringCloud(二)- 服务注册与发现Eureka

    离上一篇微服务的基本概念已经过去了几个月,在写那篇博客之前,自己还并未真正的使用微服务架构,很多理解还存在概念上.后面换了公司,新公司既用了SpringCloud也用了Dubbo+Zookeeper, ...

随机推荐

  1. npm与cnpm的install无反应

    问题描述 1.npm -v检查版本正常,npm install安装依赖提示超时 2.cnpm -v检查版本正常,cnpm install安装依赖无反应(输入命令后没有任何提示,一直卡在那) 解决(参考 ...

  2. C运算符

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号. C 语言内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符.关系运算符.逻辑运算符.位运算符.赋值运算符.杂项运算符 C 中的运算符优先 ...

  3. 谈谈逆向android里面的so

    1. 加密sgf算法分析 2.gnugo瘦身记

  4. Python脚本字符集问题

    运行脚本的时候,总是报错: SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb9 in position 0: inval ...

  5. C#下载Url文件到本地

    protected void Page_Load(object sender, EventArgs e) { string filePath = Request.Params["FilePa ...

  6. ----Arrow functions----

    Arrow functions Arrow functions表达式相比函数表达式有更短的语法,没有自己的this.argument.super或者new.target. 1.语法规则: 基础语法: ...

  7. Scrum冲刺阶段4

    成员今日完成的任务 人员 任务 何承华 学习后端设计 陈宇 后端设计 丁培辉 学习后端设计 温志铭 日程添加界面设计(一半) 杨宇潇 日程添加界面设计(一半) 张主强 服务器构建 成员遇到的问题 人员 ...

  8. JAVA的环境变量配置

    开发JAVA程序需要先准备开发环境,安装好操作系统后首先需要去下载JDK并安装. JDk(Java Development Kit )是Java开发工具包,如果您要开发基于Java的应用首先需要下载并 ...

  9. BERT(Bidirectional Encoder Representations from Transformers)

    BERT的新语言表示模型,它代表Transformer的双向编码器表示.与最近的其他语言表示模型不同,BERT旨在通过联合调节所有层中的上下文来预先训练深度双向表示.因此,预训练的BERT表示可以通过 ...

  10. Centos7 登录mysql 出现mysql.sock不存在

    记一次纠错大战 本来今天开开心心地部署nginx和uwsgi到我的Django服务器,刚想给老师演示一遍我这项目如何酷炫时,一登陆就出现mysql连接不上了 (2003, "Can't co ...