创建第一个使用注册中心(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;
    }
}

 

posted @ 2020-07-09 20:58  64Byte  阅读(338)  评论(0编辑  收藏  举报