SpringCloud学习笔记之Eureka

一. 写在前面

   Spring Cloud及微服务的概念最近被炒得很火。准备把学习了解到的这些东西记录下。主要还是参考网络上的一些前辈写好的博客和资料。目的更多的也只是作为个人的备忘录及记录下学习的历程。开发工具选择了Idea,依赖管理工具用的是maven。Spring Cloud各组件版本我会多可能或多做一些尝试,主要做到依赖版本不冲突就好了。

二. 创建服务注册中心

   看标题其实可以知道,我们这一章主要讲的就是服务注册发现。废话不多说,直接看看怎么做。

2.1 创建一个maven项目

   先记下要引入的依赖:使用spring-boot-starter-parent作为父项目,引入spring-boot-starter-test作为测试框架。
<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.zqx</groupId>
    <artifactId>eurekaregistry</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>springcloud-chapter1</name>
    <description>Demo project for SpringCloud</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
    </parent>

    <modules>
        <module>eureka-server</module>
        <module>eureka-client</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>

    <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>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

对于这个pom说明下:
首先,有几个对我来说之前不太熟的maven知识点,记录下怎么查他们的概念和用法的:
dependencyManagement 参考:https://blog.csdn.net/OiteBody/article/details/70882940
parent标签 参考:https://blog.csdn.net/yeguxin/article/details/77109725
引入spring-boot-starter-parent有什么用 参考:https://blog.csdn.net/qq_35981283/article/details/77802771
哪spring-boot-starter-test呢 https://www.cnblogs.com/chenergougou/p/6834336.html
其次,看到这里有两个module。说明后面我们会搞两个子项目。一个作为服务注册中心(eureka-server),一个作为服务提供者(eureka-client)。以后以上pom就作为公共的父pom,
其他的子项目都引入他。

2.2 创建一个子项目

右击工程 =》New =》Module。

按照之前父pom里定义的module填写子项目名:

选择eureka-server作为服务注册发现组件:

做完之后pom文件类似于下面这样的

<?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">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.zqx</groupId>
	<artifactId>eureka-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>eureka-server</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<spring-cloud.version>Finchley.SR1</spring-cloud.version>
	</properties>

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

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<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>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

可以看到,这里从父项目里自动带过来了很多东西。主要就只是自动加了spring-cloud-starter-netflix-eureka-server这个依赖。所以,其实我们可以精简一下。很多从父pom里带过来的东西其实是重复的。精简后的pom:

<?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">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.zqx</groupId>
	<artifactId>eureka-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>eureka-server</name>
	<description>Demo project for eureka-server</description>

	<parent>
		<groupId>com.zqx</groupId>
		<artifactId>eurekaregistry</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>

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



</project>

2.3 配置启动一个服务注册中心

这里主要就两步,一是启动类加上@EnableEurekaServer注解

package com.zqx.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaServerApplication.class, args);
	}
}

二是创建配置文件application.yml并配置好一些基础的属性。

server:
  port: 6666
eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
  application:
    name: eureka-server

一般情况下,一个eureka-server默认也是一个eureka-client。所以,我们设置register-with-eureka=false 让其不向服务注册中心注册自己。fetch-registry=false设置不检索服务。按我理解,一般来说只有服务注册中心这个特殊的服务这样配置,其他服务都默认为true。

2.4 启动服务注册中心

到这里其实,我们就可以启动服务注册中心看下效果了:

发现其实目前为止,我们没有任何服务注册上去。所以,接下来我们要做的就是把eureka-client这个服务注册上去。

三. 创建一个服务提供者并注册到服务注册中心

3.1 再次创建一个子项目

这里其实和前面差不多,也是创建子module的步骤。弄完之后的pom文件如下:

<?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">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.zqx</groupId>
	<artifactId>eureka-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>eureka-client</name>
	<description>Demo project for eureka-client</description>

	<parent>
		<groupId>com.zqx</groupId>
		<artifactId>eurekaregistry</artifactId>
		<version>1.0-SNAPSHOT</version>
	</parent>

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

</project>

可以看到其实就多了一个spring-boot-starter-web,这个东西是干啥的呢?参考:https://www.cnblogs.com/sherrykid/p/6419620.html
在我看来,作用其实和SpringMVC差不多。就是换了一种引入方式,比以前更方便了而已。后面会用到一些这里面提供的注解。

3.2 配置启动一个服务提供者

主要有3步,一启动类加上@EnableEurekaClient注解;二启动类直接加个@RestController方法,并实现一个服务方法,这里暂时就不考虑什么分层的问题了,主要还是为了演示;三就还是创建配置application.yml并配置好一些基础属性了。如下,

package com.zqx.eurekaclient;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaClientApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaClientApplication.class, args);
	}

	@Value("${server.port}")
	String port;

	@RequestMapping("/hi")
	public String home(@RequestParam(value = "name",defaultValue = "zqx") String name){
		return "hi "+name+",i am from port:"+port;
	}

}

server:
  port: 6667
eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:6666/eureka/
spring:
  application:
    name: eureka-client

3.3 启动服务

此时就已经可以启动这个服务,查看效果了。

可以看到现在的服务列表里面已经有一个服务了,且我们可以直接用浏览器请求访问这个服务提供的方法url,测试下方法的效果:

四. 主要参考

https://blog.csdn.net/forezp/article/details/81040925

posted @ 2018-08-27 00:05  zhuqingxin  阅读(228)  评论(0编辑  收藏  举报