zoukankan      html  css  js  c++  java
  • 创建第一个使用注册中心(Eureka)的SpringCloud项目

    一、创建一个maven的pom的父包继承SpringBoot-parent

      子项目--继承-->父项目 --> 继承 -->springBoot-parent

    1、添加相关依赖

    <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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.zl</groupId>
        <artifactId>springCloud-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <!--1、继承Spring-boot-parent -->
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.9.RELEASE</version>
            <relativePath /> <!-- lookup parent from repository -->
        </parent>
    
        <!-- 版本的控制 -->
        <properties>
            <java.version>1.8</java.version>
            <!-- 规定SpringCloud的版本 -->
            <spring.cloud.version>Greenwich.SR1</spring.cloud.version>
        </properties>
    
        <!-- 2、添加SpringCloud的依赖 -->
            <!-- 只是对版本进行管理,不会实际引入jar   -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring.cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    <!-- 父项目添加maven插件,子项目不用编写了-->
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    二、创建注册中心(eureka-server)

    1、创建一个SpringBoot的jar项目

    2、修改pom.xml中的parent,继承创建的maven父项

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <!-- 1、修改父类为maven的pom文件,因为maven的pom继承的springboot -->
        <parent>
            <groupId>com.zl</groupId>
            <artifactId>springCloud-parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!-- 2、指定父项目的pom文件路径, 默认从本地仓库查找 如果父项目自定义的, 需要指定父项目的pom文件路径 -->
            <relativePath>../springCloud-parent/pom.xml</relativePath>
        </parent>
        
        <artifactId>springCloud-eureka</artifactId>
        <name>springCloud-eureka</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            
            <!-- 3、导入eureka-server的依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            </dependency>
        </dependencies>
    </project>

    3、在启动类添加一个注解, @EnableEurekaServer,表示这个项目是一个Eureka-server(注册中心)

    @SpringBootApplication
    //表示这个项目是一个Eureka-server(注册中心)
    @EnableEurekaServer
    public class SpringCloudEurekaApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringCloudEurekaApplication.class, args);
        }

    4、在配置文件application.yml中添加Eureka-server的相关配置

    #设置端口
    server:
      port: 10001
      
    #给这个项目取一个名字
    spring:
      application:
      #取名, 不能使用_ name:
    springCloud
    -eurasia #eureka相关配置 eureka: instance: hostname: 127.0.0.1 #设置是否将自己作为客户端注册到注册中心(缺省true) #这里为不需要,查看@EnableEurekaServer注解的源码,会发现它间接用到了@EnableDiscoveryClient client: register-with-eureka: false #设置是否从注册中心获取注册信息,默认值为true #因为这是一个单点的EurakaServer,不需要同步其他EurekaServer节点的数据,故设置为false fetch-registry: false # 实际测试:若修改尾部的eureka为其它的,比如/myeureka,注册中心启动没问题,但服务端在注册时会失败 # 报告异常:com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server # 一定是eureka serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

    启动注册中心:  访问注册中心:  ip:端口

    http://127.0.0.1:10001/

     三、搭建服务提供者 和 搭建服务消费者(共同相关配置)(eureka-client)

    1、创建一个SpringBoot的jar项目,添加spring-boot-starter-web 的starters

    2、修改pom.xml中的parent,继承创建的maven父项目

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <!-- 1、修改父类为maven的pom文件,因为maven的pom继承的springboot -->
        <parent>
            <groupId>com.zl</groupId>
            <artifactId>springCloud-parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!-- 2、指定父项目的pom文件路径, 默认从本地仓库查找 如果父项目自定义的, 需要指定父项目的pom文件路径 -->
            <relativePath>../springCloud-parent/pom.xml</relativePath>
        </parent>
    
        <artifactId>springCloud-client1</artifactId>
        <name>springCloud-client1</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!-- 热部署 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
    
            <!-- 3、导入eureka-client的依赖 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
    </project>

    3、在启动类添加一个注解, @EnableEurekaClient,表示这个项目是一个Eureka-client(服务)

      如果选用的注册中心是eureka,那么就推荐@EnableEurekaClient,

      如果是其他的注册中心,那么推荐使用@EnableDiscoveryClient。

    @SpringBootApplication
    //表示这个项目是一个Eureka-client(服务)
    @EnableEurekaClient //或者使用 @EnableDiscoveryClient
    public class SpringCloudClient1Application {
        public static void main(String[] args) {
            SpringApplication.run(SpringCloudClient1Application.class, args);
        }

    4、在配置文件application.yml中添加Eureka-Client的相关配置

    #设置端口
    server:
      port: 8888
      
    #给这个项目取个名字
    spring:
      application:
      #取名, 不能使用_ name:
    springCould
    -client1 #eureka相关配置 eureka: instance: hostname: 127.0.0.1 #设置是否将自己作为客户端注册到注册中心(缺省true) #这里为不需要,查看@EnableEurekaServer注解的源码,会发现它间接用到了@EnableDiscoveryClient instance-id: userService-${spring.cloud.client.ipaddress}-${server.port} client: serviceUrl: defaultZone: http://${eureka.instance.hostname}:10001/eureka/

    开启client1:可在注册中心查看相关信息

     创建多个客户端模块只需要相同的步骤,将端口改为不一致的就行

    四、搭建服务提供者--区别

    1、不需要做多余的配置

    2、创建一个controller接口,告诉消费放url、请求参数、返回参数

    //一个测试接口
    //相当于加了一个@Controller 和 @ResponseBody
    @RestController
    @RequestMapping(path = "hello",produces = "application/json;charset=utf-8")
    public class helloController {
    
        @GetMapping("sayHello/{word}")
        public String sayHello(@PathVariable("word")String word)  throws  Exception{
            return "hello:"+word;
        }
    }

    五、搭建服务消费者--区别

    1、在application.yml配置文件中添加服务提供者的url

    #2、服务提供方的url   http://+ip+端口+窄化请求路径+访问路径
    helloService:
      servicePath: http://${eureka.instance.hostname}:8888/hello/sayHello/

    2、在 SpringCloudClient2Application 启动类中添加一个RestTemplate(Rest的HTTP客户端模板工具类)

    //创建一个RestTemplate
    @Bean
    public RestTemplate createRestTemplate() {
        return new RestTemplate();
    }

    3、在controller中添加服务提供者的url,访问服务提供者的接口

    @RestController
    @RequestMapping(path = "test", produces = "application/json;charset=utf-8")
    public class TestController {
    
        // 类似HttpClient的一个发生http请求对象
        @Autowired
        private RestTemplate restTemplate;
    
        @Value("${helloService.servicePath}") //获取yml中的服务提供者的url参数
        private String helloServiceUrl;
    
        @GetMapping("testHello/{name}")
        public String testHello(@PathVariable("name") String name) throws Exception {
            // 调用helloProvice服务
            // http://${eureka.instance.hostname}:8888/sayHello/aa
            String rs = restTemplate.getForObject(helloServiceUrl + name, String.class);
            return rs;
        }
    }
  • 相关阅读:
    豆瓣最佳影评-星级转换
    佛山链家-bs修改网页代码难题-待突破
    爬取学校官网新闻-bs与xpath的恩怨情仇
    猫眼电影评论(1366错误)-版本一
    books新手实践xpath
    scrapy项目入门--shell的使用!
    selenium模拟浏览器进行百度搜索
    在VM中安装CentOs后无法切换到root用户
    VMware安装Linux虚拟机(手动划分分区)(CentOS为例)详细图解
    JDBC连接数据库 mysql serverTimezone 时差问题
  • 原文地址:https://www.cnblogs.com/64Byte/p/13276175.html
Copyright © 2011-2022 走看看