转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/84549747
本文出自【我是干勾鱼的博客】
Ingredient:
Java:Java SE Development Kit 8u162(Oracle Java Archive),Linux下安装JDK修改环境变量
Eclipse:Eclipse Neon 3 Packages
SpringBoot: SPRING INITIALIZR(Spring Boot)
之前在巧玩SpringBoot——SpringBoot的第一个“Hello World!”中讲述过SpringBoot的搭建,能够看出SpringBoot搭建出一个service还是非常简单的。今天来讲解一下使用SpringCloud搭建服务注册与服务发现。
GitHub源码:springcloud-eureka。
我们知道,SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。也就是说SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,使得搭建服务非常简便,这使得她打上了微服务的快车,被广泛应用于微服务领域的服务开发。
俗话说,家不可一日无主!既然每个“微(小)”的“服务”工作已经有人做了,那么这些服务之间的管理又由谁来管呢?答案就是SpringCloud!SpringCloud就是微服务之间的大管家,统一协调服务系统之间的诸多工作的,比如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。
SpringBoot与SpringCloud本来是简化Spring家族的系统操作的,不过自从搭上了微服务这个时下异常火热的技术快车之后,已经蓬勃发展、圈粉无数,就如同周杰伦与方文山一样组合成实力强悍、互为御用的好伙(ji)伴(you)^_^,一跃成为Spring家族的当家花旦!
这里首先说明一点,虽然说SpringCloud与SpringBoot互为御用,从概念上说它们有不同分工,但实现上它们之间却并不是各自独立的实体,而是一种寄生关系:SpringCloud也要基于SpringBoot这个服务体来实现其功能。
来到SPRING INITIALIZR,选择配置为:
在Project Metadata中配置好Group和Artifact。
在Dependencies中输入Eureka Server并将其选择。
最后点击Generate Project,生成一个Maven工程的模板并下载下来,使用Eclipse将其导入。
自动生成的Maven中pom.xml文件的配置如下:
<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.0modelVersion>
<groupId>com.yhdgroupId>
<artifactId>springcloudserverartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>springcloudservername>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.1.0.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
<spring-cloud.version>Greenwich.M3spring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
<repositories>
<repository>
<id>spring-milestonesid>
<name>Spring Milestonesname>
<url>https://repo.spring.io/milestoneurl>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
project>
这里的入口文件为:
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);
}
}
这里使用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
启动文件:
SpringcloudserverApplication.java
在浏览器中输入:
http://localhost:8761/
这样就进入了Eureka Server的界面,如图所示:
这里面的:
No instances available
表示还没有发现注册进来的服务。
OK服务中心创建好了,我们来创建一个服务提供者,也就是Eureka Client。
这里面的配置大部分都同2.1.1中配置的一样,除了下面:
在Dependencies中,要输入:
最后点击Generate Project生成模板,下载下来并导入进Eclipse里面。
内容如下:
<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.0modelVersion>
<groupId>com.yhdgroupId>
<artifactId>springcloudclientartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>springcloudclientname>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.1.0.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
<spring-cloud.version>Greenwich.M3spring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
<repositories>
<repository>
<id>spring-milestonesid>
<name>Spring Milestonesname>
<url>https://repo.spring.io/milestoneurl>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
project>
这里的入口文件为:
SpringcloudclientApplication.java
这里要做2件事:添加注解,添加一个controller。
在其中加入注解:
@EnableEurekaClient
@RestController
@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;
}
}
编辑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端就不需要设置了,这样才会将自己的服务暴露给注册中心。
启动client的入口文件:
SpringcloudclientApplication.java
确保先运行Eureka Server,再运行Eureka Client,这样将两个服务都运行起来后,在浏览器中输入:
http://localhost:7001/
进入Eureka Server的界面,如图所示:
能够看到注册中心已经成功查找到了服务并将其注册了进来。
再打开一个浏览器页面,输入:
http://localhost:7002/hello?name=zhangsan
会得到返回结果的响应:
Hello zhangsan ,your port is:7002
如图所示:
可见注册成功的服务也被成功调用了!
巧玩SpringBoot——SpringBoot的第一个“Hello World!”
史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现Eureka(Finchley版本)
springcloud微服务二:Eureka服务治理之服务注册中心
Spring Cloud 系列文章