前面SpringBoot已经介绍了SpringBoot相关使用,如果对SpringBoot不了解可以先看一下。
1.SpringCloud介绍
SpringCloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等,运行环境简单。SpringCloud是基于SpringBoot的。
2.创建服务注册中心
在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块【这里使用的是IDEA工具创建,Eclipse具体可以直接创建Maven,然后引入相应的jar包即可】
2.1 首先创建一个maven主工程。
File->New->Project->Spring Initializr->Next
填写GroupId:com.tangjinyi
填写ArtifactId:springcloud-eureka-server
继续,选择->Cloud Discovery->Eureka Server。
由于IDEA版本的问题,所以使用的SpringBoot版本也都不一样,我这里工具默认使用的是SpringBoot2.0.1.RELEASE版本,在引入jar包上与1.x版本有一定的区别,详见在配置文件里面的说明:
<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.tangjinyigroupId>
<artifactId>springcloud-eureka-serverartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>springcloud-eureka-servername>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.1.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>Finchley.M9spring-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>
2.2配置文件application.properties和application.yml
springcloud提供了两种配置文件可供选择,分别是.properties和.yml。名称都是固定的不要随便修改。
网上很多资料都是使用.yml配置文件,本人习惯使用.properties配置文件。并没有太多的差异,可根据个人喜好选择。
如果使用maven构建的工程,该配置文件应放置在resources目录下。
#设置eureka服务的端口号
server.port=8761
#设置eureka服务访问的host
eureka.instance.hostname=localhost
#默认情况下erureka server也是一个eureka client ,必须要指定一个 server。通过eureka.client.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server.
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#对eureka控制台设置访问权限
#spring.security.user.name=root
#spring.security.user.password=123456
#eureka.client.service-url.defaultZone=http://root:123456@localhost:8761/eureka/
eureka.client.service-url.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
2.3启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class SpringcloudEurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudEurekaServerApplication.class, args);
}
}
前面 SpringCloud学习-(1)扫盲 介绍了@SpringBootApplication注解。
@SpringBootApplication
=@Configuration
+@ComponentScan
+@EnableAutoConfiguration
,@ComponentScan
默认扫描与SpringcloudEurekaServerApplication
类同级和下级的目录,所以SpringcloudEurekaServerApplication的位置一定要注意。@EnableEurekaServer
注解表示启动一个eureka服务注册中心。
2.4启动eureka服务注册中心
直接右键run as SpringcloudEurekaServerApplication 类即可启动eureka服务。
2018-05-21 14:27:41.649 INFO 6152 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@5c6648b0: startup date [Mon May 21 14:27:41 CST 2018]; root of context hierarchy
2018-05-21 14:27:41.836 INFO 6152 --- [ main] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2018-05-21 14:27:41.871 INFO 6152 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'configurationPropertiesRebinderAutoConfiguration' of type [org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$d4245eb4] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.1.RELEASE)
2.5访问eureka后台界面
eureka服务启动完毕后,打开浏览器访问http://localhost:8761,打开eureka服务注册中心管控台如下:
No application available 没有服务被发现 ……
因为没有注册服务当然不可能有服务被发现了。
3.创建服务提供者
3.1按照创构eureak server的方式再创建一个client工程
GroupId:com.tangjinyi
ArtifactId:springcloud-eureka-client1
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.tangjinyigroupId>
<artifactId>springcloud-eureka-client1artifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>springcloud-eureka-client1name>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.1.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>Finchley.M9spring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
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>
3.2修改配置文件application.properties
#eureka.client.service-url.defaultZone=http://root:123456@localhost:8761/eureka/
#eureka注册中心的访问地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
#服务提供者提供的服务端口
server.port=8762
#服务提供者的提供的服务名为service-sayHello
spring.application.name=service-sayHello
3.3修改启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Value;
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class SpringcloudEurekaClient1Application {
public static void main(String[] args) {
SpringApplication.run(SpringcloudEurekaClient1Application.class, args);
}
@Value("${server.port}")
private String port;
@RequestMapping(value = "/sayHello")
public String sayHello(@RequestParam String name){
return "hello "+name+",port:"+port;
}
}
@RestController
注解在springboot系列中已经介绍过了,添加该注解表示提供Rest服务。
@EnableDiscoveryClient
注解就是将服务注册到eureka注册中心上。还有一个注解@EnableEurekaClient
也可以使用,其效果同@EnableDiscoveryClient
,但是@EnableEurekaClient
注解只能适用于eureka注册中心,而@EnableDiscoveryClient
则是一个通用注解。所以这里我们选择通用的注解使用。
3.4启动服务提供者
仍然是右键run as SpringcloudEurekaClient1Application。
3.5注册服务查看
服务提供者启动完毕后,查看eureka注册中心
服务提供者service-sayHello已经注册到eureka注册中心上。
3.6测试service-sayHello服务
由前面的配置可以知道服务的端口是8762,服务的访问路径为sayHello,服务传递的参数为name
打开浏览器,访问http://localhost:8762/sayHello?name=eurekaclient
到此,一个简单的eureka服务注册和发现小例子就完成了。