巧玩SpringCloud——使用Eureka搭建服务注册中心与服务发现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dongdong9223/article/details/84549747

转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/84549747
本文出自【我是干勾鱼的博客

Ingredient:

之前在巧玩SpringBoot——SpringBoot的第一个“Hello World!”中讲述过SpringBoot的搭建,能够看出SpringBoot搭建出一个service还是非常简单的。今天来讲解一下使用SpringCloud搭建服务注册与服务发现。

GitHub源码:springcloud-eureka

1 SpringCloud是什么

我们知道,SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。也就是说SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,使得搭建服务非常简便,这使得她打上了微服务的快车,被广泛应用于微服务领域的服务开发。

俗话说,家不可一日无主!既然每个“微(小)”的“服务”工作已经有人做了,那么这些服务之间的管理又由谁来管呢?答案就是SpringCloud!SpringCloud就是微服务之间的大管家,统一协调服务系统之间的诸多工作的,比如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。

SpringBoot与SpringCloud本来是简化Spring家族的系统操作的,不过自从搭上了微服务这个时下异常火热的技术快车之后,已经蓬勃发展、圈粉无数,就如同周杰伦与方文山一样组合成实力强悍、互为御用的好伙(ji)伴(you)^_^,一跃成为Spring家族的当家花旦!

2 创建服务注册中心(Server)

这里首先说明一点,虽然说SpringCloud与SpringBoot互为御用,从概念上说它们有不同分工,但实现上它们之间却并不是各自独立的实体,而是一种寄生关系:SpringCloud也要基于SpringBoot这个服务体来实现其功能。

2.1 官网下载Maven工程

2.1.1 选择配置

来到SPRING INITIALIZR,选择配置为:

  • Generate a:Maven Project
  • With:Java
  • Spring Boot:2.1.0

Project Metadata中配置好GroupArtifact

Dependencies中输入Eureka Server并将其选择。

最后点击Generate Project,生成一个Maven工程的模板并下载下来,使用Eclipse将其导入。

2.1.2 pom.xml的配置

自动生成的Maven中pom.xml文件的配置如下:

<?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.yhd</groupId>
	<artifactId>springcloudserver</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springcloudserver</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.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>Greenwich.M3</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>

	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

</project>

2.1.3 修改SpringBoot的入口文件

这里的入口文件为:

SpringcloudserverApplication.java

在其中加入注解:

@EnableEurekaServer

文件内容如下:

package com.yhd.springcloudserver;

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

@SpringBootApplication
@EnableEurekaServer
public class SpringcloudserverApplication {

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

2.1.4 编辑application.yml文件

这里使用yml的编辑方式。先将

application.properties

文件名改为:

application.yml

在其中加入:

server:
  port: 7001

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
  application:
    name: eureka-server

2.2 运行Server

启动文件:

SpringcloudserverApplication.java

在浏览器中输入:

http://localhost:8761/

这样就进入了Eureka Server的界面,如图所示:

在这里插入图片描述

这里面的:

No instances available

表示还没有发现注册进来的服务。

3 创建服务提供者(Client)

OK服务中心创建好了,我们来创建一个服务提供者,也就是Eureka Client

3.1 官网下载Maven工程

3.1.1 选择配置

这里面的配置大部分都同2.1.1中配置的一样,除了下面:

Dependencies中,要输入:

  • Web
  • Eureka Discovery

最后点击Generate Project生成模板,下载下来并导入进Eclipse里面。

3.1.2 pom.xml的配置

内容如下:

<?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.yhd</groupId>
	<artifactId>springcloudclient</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springcloudclient</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.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>Greenwich.M3</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</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>

	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

</project>

3.1.3 修改SpringBoot的入口文件

这里的入口文件为:

SpringcloudclientApplication.java

这里要做2件事:添加注解,添加一个controller。

3.1.3.1 添加注解

在其中加入注解:

@EnableEurekaClient
@RestController

3.1.3.2 添加controller

@RequestMapping("/hello")
	public String home(@RequestParam(value = "name", defaultValue = "zhangsan") String name) {
	    return "Hello " + name + " ,your port is:" + port;
	}

整体上文件内容如下:

package com.yhd.springcloudclient;

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

	public static void main(String[] args) {
		SpringApplication.run(SpringcloudclientApplication.class, args);
	}
	
	@Value("${server.port}")
	String port;

	@RequestMapping("/hello")
	public String home(@RequestParam(value = "name", defaultValue = "张三") String name) {
	    return "Hello " + name + " ,your port is:" + port;
	}
}

3.1.4 编辑application.yml文件

编辑application.yml

在其中加入:

server:
  port: 7002

eureka:
  instance:
    hostname: service1
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:7001/eureka/

spring:
  application:
    name: eureka-service

这里的设置,同2.1.4对比,去掉了:

eureka:
  client:
  	#设置是否向注册中心注册,默认是true
    registerWithEureka: false
    #是否需要去检索寻找服务,默认是true
    fetchRegistry: false

由于这两个配置默认都为true,对于client端就不需要设置了,这样才会将自己的服务暴露给注册中心。

3.2 运行client

启动client的入口文件:

SpringcloudclientApplication.java

4 查看服务注册中心

确保先运行Eureka Server,再运行Eureka Client,这样将两个服务都运行起来后,在浏览器中输入:

http://localhost:7001/

进入Eureka Server的界面,如图所示:

在这里插入图片描述

能够看到注册中心已经成功查找到了服务并将其注册了进来。

5 调用服务

再打开一个浏览器页面,输入:

http://localhost:7002/hello?name=zhangsan

会得到返回结果的响应:

Hello zhangsan ,your port is:7002

如图所示:

在这里插入图片描述

可见注册成功的服务也被成功调用了!

6 参考:

巧玩SpringBoot——SpringBoot的第一个“Hello World!”

史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)

springcloud微服务二:Eureka服务治理之服务注册中心

Spring Cloud 系列文章

阅读更多

没有更多推荐了,返回首页