zoukankan      html  css  js  c++  java
  • 搭建SpringCloud-Eureka 注册中心以及服务提供与调用

    纸上得来终觉浅,绝知此事要躬行啊~果然看着很easy,自己搞起来就是各种坑~各位看官,容我慢慢道来~

    关于springcloud是什么我就不废话了~

    Eureka 

    Eureka(原来以为是缩写,原来就是一个单词,翻译为:我发现了,我找到了!0.0)是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现。也是springcloud体系中最重要最核心的组件之一。

    这个东西通俗的理解就像是一个淘宝,你是卖家也好,还是买家也好,你要交易,你得在我这先注册一个账号。

    1,先新建一个maven工程

    2,在pom文件中引入相关jar包

    学习大佬的教程,结果用大佬的demo直接报错,启动程序一直提示:

    Caused by: java.lang.ClassNotFoundException: com.sun.jersey.api.core.DefaultResourceConfig

    郁闷,查看spring-cloud-starter-eureka-server   jar包

    发现其中引入的jersey的jar是1.19.1,然后自己研究,发现1.19可以使用,遂在pom文件中引入,按照我的理解1.19.1肯定比1.19版本高的,怎么反而不行了?

    再启动,然后这个错误是消失了,结果后面又报错,又出来一个servo 包下的类找不到,mmp~又是版本问题,再引入 servo包,ok了~

    最终形成如下的pom配置文件

     1 <parent>
     2        <groupId>org.springframework.boot</groupId>
     3        <artifactId>spring-boot-starter-parent</artifactId>
     4        <version>1.5.8.RELEASE</version>
     5    </parent>
     6    
     7    <dependencies>
     8     <dependency>
     9         <groupId>org.springframework.cloud</groupId>
    10         <artifactId>spring-cloud-starter</artifactId>
    11     </dependency>
    12     <dependency>
    13         <groupId>com.sun.jersey</groupId>
    14            <artifactId>jersey-bundle</artifactId>
    15              <version>1.19</version>
    16          </dependency>
    17 
    18         <dependency>
    19             <groupId>com.netflix.servo</groupId>
    20             <artifactId>servo-core</artifactId>
    21             <version>0.12.7</version>
    22         </dependency>
    23        <dependency>
    24         <groupId>org.springframework.cloud</groupId>
    25         <artifactId>spring-cloud-starter-eureka-server</artifactId>
    26         </dependency>
    27    </dependencies>
    28    <dependencyManagement>
    29     <dependencies>
    30       <dependency>
    31         <groupId>org.springframework.cloud</groupId>
    32         <artifactId>spring-cloud-dependencies</artifactId>
    33         <version>Dalston.RC1</version>
    34         <type>pom</type>
    35         <scope>import</scope>
    36       </dependency>
    37     </dependencies>
    38   </dependencyManagement>
    39    <repositories>
    40     <repository>
    41       <id>spring-milestones</id>
    42       <name>Spring Milestones</name>
    43       <url>https://repo.spring.io/milestone</url>
    44       <snapshots>
    45         <enabled>false</enabled>
    46       </snapshots>
    47     </repository>
    48   </repositories>

    3,编写启动类代码

    1 @SpringBootApplication
    2 @EnableEurekaServer
    3 public class App {
    4 
    5     public static void main(String[] args) {
    6         SpringApplication.run(App.class, args);
    7     }
    8 }

    注意添加EnableEurekaServer注解

    4,添加配置文件

    对于这个配置文件的添加有2种格式,一种是application.properties 另外一种是 application.yaml。对于2种格式的区别,我们不做比较。但是对于这个文件的位置,我还是纳闷了一会,最后经过尝试,如图所示位置

     并且需要注意文件名称一个字母都不能少0.0,我就是由于没注意少写个字母,也报错了。。。。

    application.properties 格式,文件内容如下:

    1 spring.application.name=spring-cloud-eureka
    2 server.port=8000
    3 eureka.client.register-with-eureka=false
    4 eureka.client.fetch-registry=false
    5 eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

    注意第3 行默认是true也就是如果你不加上这个false,启动就会报错,因为他会想把自己注册到自己上面!!!第4行默认也是true,意思是他要不要获取注册到服务中心的信息 

    5,启动注册中心

    在浏览器输入 localhost:8000,查看注册中心是否正常启动,出现如下截图,说明已经ok

    有了注册中心,我们在接着搞一个服务提供者,和服务消费者。

    服务提供者

    1,新建maven工程

    2,在pom文件中引入和注册中心服务一样的jar包。

    3,编写application.properties

    内容如下:

    1 spring.application.name=spring-cloud-producer
    2 server.port=9000
    3 eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

    第一行是给自己的服务命名,第二行设置自己的访问端口,第三行设置自己要注册到那个注册中心,因为我们在上面设置了eureka注册中心是本地的8000端口,所以就写这个地址

    4,编写启动类代码

    1 @SpringBootApplication
    2 @EnableDiscoveryClient
    3 public class App 
    4 {
    5     public static void main( String[] args )
    6     {
    7         SpringApplication.run(App.class, args);
    8     }
    9 }

    注意添加 EnableDiscoveryClient 注解

    5,编写服务控制器类代码

    1 @RestController
    2 public class HelloController {
    3     
    4     @RequestMapping("/hello")
    5     public String hello(@RequestParam String name) {
    6         return "hello "+name+",nice to meet you!";
    7     }
    8 }

     到这里 服务提供者完成,启动程序,无报错即可,刷新注册中心的页面,会看到Application中当前注册的服务。

    服务调用者

    1,新建maven工程

    2,同样在pom文件中引入和之前一样的内容。

    3,编写application.properties

    1 spring.application.name=spring-cloud-consumer
    2 server.port=9001
    3 eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

    第一行也是给当前服务起名字,第二行设置端口,第三行设置注册中心url。

    4,编写启动类代码

     1 @SpringBootApplication
     2 @EnableDiscoveryClient
     3 @EnableFeignClients
     4 public class App 
     5 {
     6     public static void main( String[] args )
     7     {
     8         SpringApplication.run(App.class, args);
     9     }
    10 }

    注意这个启动类,比服务提供者多了一个EnableFeignClients注解,这个注解的作用就是启用feign进行远程调用。

    5,编写feign调用实现

    1 @FeignClient(name= "spring-cloud-producer")
    2 public interface HelloRemote {
    3     @RequestMapping(value = "/hello")
    4     public String hello(@RequestParam(value = "name") String name);
    5 }

    注意这是一个接口,上面的注解参数name,就是指定你当前要调用的服务提供者名称。另外还要注意方法中的参数name 和服务提供者中的参数保持一致

    6,编写服务调用者控制器类

     1 @RestController
     2 public class ConsumerController {
     3 
     4     @Autowired
     5     HelloRemote HelloRemote;
     6     
     7     @RequestMapping("/hello/{name}")
     8     public String hello(@PathVariable("name") String name) {
     9         return HelloRemote.hello(name);
    10     }
    11 
    12 }

    在当前类中引入HelloRemote 接口,通过调用本地hello方法,然后再调用HelloRemote 接口中的方法

    启动程序,无报错即可。

    刷新注册中心这个时候应该可以看到2个服务已经注册

    测试验证

     打开浏览器输入 :  http://localhost:9001/hello/JJ

    如上图正常返回结果,说明整个服务调用和提供者ok!!!

  • 相关阅读:
    Linux下通过.desktop 文件创建桌面程序图标及文件编写方式(Desktop Entry文件概述)
    Ubuntu16.04进入挂起或休眠状态时按任何键都无法唤醒问题解决办法
    Ubuntu16.04+Gnome3 锁定屏幕快捷键无效解决办法
    A start job is running for Raise network interface(5min 13s )问题解决方法
    Ubuntu16.04 “有线未托管”有线网络不可用问题解决
    A start job is running for Network Manager wait online (29s / no limit) 等待30s解决办法
    Linux 串口终端调试工具minicom
    Linux 终端仿真程序Putty
    Oracle:在 debian9 上完美安装 oracle 10.2.0.5 x64
    从debian9、ubuntu18.04的deb包依赖来看,似乎不是那么好!!
  • 原文地址:https://www.cnblogs.com/JJJ1990/p/10137384.html
Copyright © 2011-2022 走看看