• demo(一)eureka----服务注册与提供


     下面写一个简单的demo验证下eureka,实现服务注册、服务发现。

    一、单节点:

    1、api:

    封装其他组件需要共用的dto

    2、eureka-service服务注册中心

    (1)pom:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>com.demo.cloud</groupId>
    7. <artifactId>myspringcloud-eureka-server</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. <!-- springBoot -->
    10. <parent>
    11. <groupId>org.springframework.boot</groupId>
    12. <artifactId>spring-boot-starter-parent</artifactId>
    13. <version>1.5.9.RELEASE</version>
    14. </parent>
    15. <properties>
    16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    17. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    18. <java.version>1.8</java.version>
    19. <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
    20. </properties>
    21. <dependencies>
    22. <!--eureka-server-->
    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>${spring-cloud.version}</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/libs-milestone</url>
    44. <snapshots>
    45. <enabled>false</enabled>
    46. </snapshots>
    47. </repository>
    48. </repositories>
    49. </project>

     (2)application.properties:在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以需要禁用它的客户端注册行为

    1. server.port=1111
    2. eureka.client.registerWithEureka=false
    3. eureka.client.fetchRegistry=false
    4. eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

    (3)启动类:

    1. package com.demo.cloud;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    5. @SpringBootApplication
    6. @EnableEurekaServer
    7. public class MyEurekaServerApplication {
    8. public static void main(String args[]){
    9. SpringApplication.run(MyEurekaServerApplication.class,args);
    10. }
    11. }

    启动后,访问http://localhost:1111/:

    就可以从后台监控服务了,(是不是比dubbo搭建zk注册中心方便多了) ,此时还没有服务注册过来,可以看到application下是空的。

    3、eureka-client注册服务提供者:将原有的springboot工程改造,注册到eureka注册中心

    (1)pom:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>com.demo.cloud</groupId>
    7. <artifactId>myspringcloud-eureka-client</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. <!-- springBoot -->
    10. <parent>
    11. <groupId>org.springframework.boot</groupId>
    12. <artifactId>spring-boot-starter-parent</artifactId>
    13. <version>1.5.9.RELEASE</version>
    14. </parent>
    15. <properties>
    16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    17. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    18. <java.version>1.8</java.version>
    19. <spring-cloud.version>Edgware.RELEASE</spring-cloud.version>
    20. </properties>
    21. <dependencies>
    22. <!--eureka-server-->
    23. <dependency>
    24. <groupId>org.springframework.cloud</groupId>
    25. <artifactId>spring-cloud-starter-eureka-server</artifactId>
    26. </dependency>
    27. <dependency>
    28. <groupId>com.demo.cloud.api</groupId>
    29. <artifactId>myspringcloud-api</artifactId>
    30. <version>1.0-SNAPSHOT</version>
    31. </dependency>
    32. <dependency>
    33. <groupId>org.springframework.boot</groupId>
    34. <artifactId>spring-boot-starter-web</artifactId>
    35. </dependency>
    36. <!-- mybatis -->
    37. <dependency>
    38. <groupId>org.mybatis.spring.boot</groupId>
    39. <artifactId>mybatis-spring-boot-starter</artifactId>
    40. <version>1.1.1</version>
    41. </dependency>
    42. <dependency>
    43. <groupId>mysql</groupId>
    44. <artifactId>mysql-connector-java</artifactId>
    45. <version>5.1.21</version>
    46. </dependency>
    47. <dependency>
    48. <groupId>commons-collections</groupId>
    49. <artifactId>commons-collections</artifactId>
    50. <version>3.2.1</version>
    51. </dependency>
    52. <dependency>
    53. <groupId>commons-lang</groupId>
    54. <artifactId>commons-lang</artifactId>
    55. <version>2.5</version>
    56. </dependency>
    57. </dependencies>
    58. <dependencyManagement>
    59. <dependencies>
    60. <dependency>
    61. <groupId>org.springframework.cloud</groupId>
    62. <artifactId>spring-cloud-dependencies</artifactId>
    63. <version>${spring-cloud.version}</version>
    64. <type>pom</type>
    65. <scope>import</scope>
    66. </dependency>
    67. </dependencies>
    68. </dependencyManagement>
    69. <repositories>
    70. <repository>
    71. <id>spring-milestones</id>
    72. <name>Spring Milestones</name>
    73. <url>https://repo.spring.io/libs-milestone</url>
    74. <snapshots>
    75. <enabled>false</enabled>
    76. </snapshots>
    77. </repository>
    78. </repositories>
    79. </project>

    (2)application.properties:

    1. server.port=2222
    2. server.context-path=/myService
    3. spring.application.name=my-service
    4. eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
    5. #mybatis
    6. spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    7. spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&useSSL=false
    8. spring.datasource.username=root
    9. spring.datasource.password=wtyy
    10. mybatis.mapper-locations=classpath*:Mapper/*Mapper.xml

    (3)dao、service、Mapper:mybatis持久化部分,此处省略

    (4)controller:

    1. package com.demo.cloud.controller;
    2. import com.demo.cloud.dto.AuthorityDTO;
    3. import com.demo.cloud.dto.UserDTO;
    4. import com.demo.cloud.service.UserService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.beans.factory.annotation.Value;
    7. import org.springframework.web.bind.annotation.RequestBody;
    8. import org.springframework.web.bind.annotation.RequestMapping;
    9. import org.springframework.web.bind.annotation.RestController;
    10. import java.util.List;
    11. @RequestMapping("/user")
    12. @RestController
    13. public class UserApiController {
    14. @Autowired
    15. private UserService userService;
    16. @Value("${server.port}")
    17. private String port;
    18. @RequestMapping("/findByUserName")
    19. public UserDTO findByUserName(String username){
    20. return userService.findByUserName(username);
    21. }
    22. @RequestMapping("/getAllUsers")
    23. public List getAllUsers(){
    24. System.out.println(port);
    25. return userService.getAllUsers();
    26. }
    27. @RequestMapping("/getAuthortiesByUserId")
    28. public List getAuthortiesByUserId(Integer userId){
    29. return userService.getAuthortiesByUserId(userId);
    30. }
    31. @RequestMapping("/addUser")
    32. public void addUser1(@RequestBody UserDTO userDTO){
    33. userService.addUser(userDTO);
    34. }
    35. }

    (5)启动类:

    1. package com.demo.cloud;
    2. import org.mybatis.spring.annotation.MapperScan;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    6. @SpringBootApplication
    7. @EnableEurekaClient
    8. @MapperScan("com.demo.cloud.dao")
    9. public class MyEurekaClientApplication {
    10. public static void main(String args[]){
    11. SpringApplication.run(MyEurekaClientApplication.class,args);
    12. }
    13. }

    注意:这里使用的是@EnableEurekaClient注解,也可以使用@EnableDiscoveryClient注解, 

    1. @EnableEurekaClient是Eureka特有的注解,用于启动Eureka客户端。当使用Eureka作为注册中心时,就推荐使用@EnableEurekaClient注解,应用启动后会自动注册到Eureka Server,并完成服务治理。
    2. @EnableDiscoveryClient是Spring Cloud通用的注解,可以与Eureka、Consul等多种注册中心对接。当我们的微服务同时需要与多个注册中心集成时,就需要使用@EnableDiscoveryClient注解。
    3. 可以说,@EnableEurekaClient@EnableDiscoveryClient的一个具体实现,如果项目中注册中心只使用Eureka,那么使用@EnableEurekaClient更加方便和简单。但如果要切换到其他的注册中心,改动较大。

    启动项目,再浏览下http://localhost:1111/:

    可以看到注册成功了。

    二、高可用部署:

    1、先部署eukera-service的高可用

    2、再部署eureka-client的高可用:连接注册中心的配置项改为多个,以逗号分隔,然后将该组件部署多个节点即可

    eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/,http://xxx.xx.xxx:1111/eureka/

  • 相关阅读:
    SQL执行计划生成
    什么是研学
    轴心时代的三大东方圣人老子、孔子和释迦牟尼
    完美解决docker skywalking报错:no provider found for module storage
    读<深入理解Java虚拟机-第3版>
    ListUtil java
    2.SpringSecurity - 处理器简单说明
    13.1 GAS基本框架搭建及第一个GA
    Unity 游戏开发、01 基础篇 | 知识大全、简单功能脚本实现
    最新基于MATLAB 2023a的机器学习、深度学习教程
  • 原文地址:https://blog.csdn.net/w_t_y_y/article/details/134399633