SpringCloud學習-(2)服務的注冊與發現(Eureka)
前面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版本有一定的區別,詳見在配置文件里面的說明:
<?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.tangjinyi</groupId>
<artifactId>springcloud-eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springcloud-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.1.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.M9</spring-cloud.version>
</properties>
<dependencies>
<!--springboot1.x使用的是該jar包,2.x在artifactId中加入了netflix,所以在使用的時候要看清楚版本號
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--對eureka控制臺設置訪問權限-->
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</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.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文件如下:
<?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.tangjinyi</groupId>
<artifactId>springcloud-eureka-client1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springcloud-eureka-client1</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.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.M9</spring-cloud.version>
</properties>
<dependencies>
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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.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服務注冊和發現小例子就完成了。
智能推薦
SpringCloud學習之路-Eureka(服務注冊與發現)
1.使用IDEA搭建Maven主工程 首先創建一個主Maven工程,在其pom文件引入依賴,spring Boot版本為2.0.3.RELEASE,Spring Cloud版本為Finchley.RELEASE。這個pom文件作為父pom文件,起到依賴版本控制的作用,其他module工程繼承該pom。 注意:父pom的打包方式為pom,modules里是子項目名 2.創建服務注冊中心...
springcloud學習筆記一:eureka服務注冊與發現
springcloud可以方便的幫我們完成微服務架構,它擁有多個子項目,可以去官網簡單看下介紹。 其中component下的代表著現有的子項目,本次所記錄的eureka就是其中spring-cloud-netflix里的一個模塊。 eureka在我們微服務架構中實現的就是服務發現與注冊的功能,我們可以稱之為注冊中心,即我們開發的服務注冊到該注冊中心,同時服務消費端來注冊中心訂閱服務。 我們可以直接...
Springcloud學習之路------------Eureka服務注冊與發現
建立eureka服務端 一、建model 如:cloud-eureka-server7001 二、改pom 添加依賴eureka-server 表示這是一個eureka服務端 三、改配置 集群板eureka: 就是把defaultZone 指向其他eureka的hostname ,如果有多個則用逗號隔開。 單機版eureka: 就是指向自己的hostname 四、主啟動 在主啟動上加入@Enabl...
SpringCloud學習筆記【二】:Eureka服務注冊與發現
文章目錄 本篇要點 Eureka基礎知識 什么是服務治理 什么是服務注冊與發現 Eureka的兩個組件 單機版Eureka構建步驟 創建服務中心模塊 引入依賴 配置yml 在啟動類上表明@EnableEurekaServer 進行測試 注冊客戶端 引入依賴 配置yml 在啟動類上表明@EnableEurekaClient 繼續測試 開啟保護機制 Eureka執行步驟理解 集群原理說明 集群版Eur...
springcloud(三)--服務注冊與發現Eureka
如題,本篇我們來引入SpringCloud中服務注冊與發現組件--Eureka,然后將SIM服務提供者向Eureka服務器進行注冊。 一、Eureka 是什么 Eureka是Netflix開發的服務發現框架,本身是一個基于REST的服務,主要用于定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它集成在其子項目spring-c...
猜你喜歡
SpringCloud(一) eureka服務注冊與發現
一、 Eureka介紹 Eureka是一個基于REST(Representational State Transfer)的服務,主要用于AWS cloud, 提供服務定位(locating services)、負載均衡(load balancing)、故障轉移(failover of middle-tier servers)。我們把它叫做Eureka Server. Eureka也提供了基于Jav...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...