springcloud學習筆記二:服務提供、消費與ribbon
標簽: springcloud ribbon
在學習筆記一里,我們簡單實現了一個注冊中心,我們就可以在上面進行服務的注冊與訂閱消費。
編寫服務,進行注冊
同樣,我們可以在STS中右鍵New->Spring Starter Project ,填寫相應內容->點擊next
選擇需要的依賴包,我們這里由于是構建一個服務提供者,要發現注冊中心,所以我們勾選Eureka Dicovery,然后點擊finish
這樣STS就幫我們創建了一個服務提供者應用,下面是完整的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.point</groupId>
<artifactId>point-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>point-provider</name>
<description>test provider</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.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>Dalston.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</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>
我們還需要配置一些功能完成我們的服務注冊。
在入口類添加注解@EnableDiscoveryClient,用于發現注冊中心。
@EnableDiscoveryClient
@SpringBootApplication
public class PointProviderApplication {
public static void main(String[] args) {
SpringApplication.run(PointProviderApplication.class, args);
}
}
在application.properties中添加相應配置
spring.application.name=point-provider
server.port=2000
eureka.client.serviceUrl.defaultZone=http://localhost:1000/eureka/
spring.application.name:服務名稱,注冊到注冊中心中的名稱,用于消費者使用。
server.port:服務端口
eureka.client.serviceUrl.defaultZone:注冊中心注冊地址
配置完以上后,我們啟動該服務,然后訪問我們的注冊中心(注冊中心的創建可以參考上一篇文章http://blog.csdn.net/u011890101/article/details/77116090)。
我們發現名稱為point-provider的服務已經成功在注冊中心完成注冊,這樣我們就可以編寫消費端來消費我們已經注冊的服務。
服務消費端
編寫消費端不得不提到的一個技術就是Ribbon,它能幫我們實現負載均衡,即我們可以部署多個同樣的服務提供者,通過ribbon,消費者可以根據多種負載策略去消費其中一個服務提供者。
我們先在服務提供者中編寫一個服務方法
@RestController
@RequestMapping("provider")
public class ProviderController {
@GetMapping("getName")
public String getName(){
System.out.println("服務被調用2000");
return "meepoGuan";
}
}
然后我們將服務提供者point-provider編譯成jar部署下,同時修改端口為2001,啟動,我們的2000同樣也進行啟動,這樣就相當于我們啟動了兩個point-provider。
訪問注冊中心,可以看到名稱為point-provider的服務,已經有2000、2001兩個實例在運行。
下一步我們就可以編寫我們的消費者,通過ribbon進行負載均衡來訪問我們的point-provider服務。
還是通過STS進行創建
右鍵New->Spring Starter Project ,填寫相應內容->點擊next
選擇需要的依賴包,我們這里選擇Eureka Dicovery與Ribbon
點擊finish創建完畢,完整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.point</groupId>
<artifactId>point-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>point-consumer</name>
<description>test consumer</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.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>Dalston.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</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-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>
開始對消費端進行一些配置
與服務提供者一樣,在入口類添加@EnableDiscoveryClient,用于發現注冊中心。
由于我們服務提供者是提供rest服務,所以我們需要引入下RestTemplate類,進行遠程訪問,同時加入@LoadBalanced,用ribbon幫我們實現負載均衡,訪問服務列表。
@EnableDiscoveryClient
@SpringBootApplication
public class PointConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(PointConsumerApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
配置application.properties
server.port=3000
spring.application.name=point-consumer
eureka.client.serviceUrl.defaultZone=http://localhost:1000/eureka/
eureka.client.register-with-eureka=false
server.port:端口
spring.application.name:服務名稱
eureka.client.serviceUrl.defaultZone:注冊中心地址
eureka.client.register-with-eureka:是否注冊到注冊中心,因為我們這里是編寫的消費端,所以不需要。
編寫controller遠程訪問服務提供者提供的方法。
@RestController
@RequestMapping("consumer")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("getName")
public String getName(){
return restTemplate.getForObject("http://point-provider/provider/getName", String.class);
}
}
http://point-provider/provider/getName
這里的point-provider即是我們的服務提供者的名稱,因為我們部署了兩個point-provider實例,所以我們可以依靠ribbon對兩個實例進行輪詢訪問(ribbon默認提供的負載策略為輪詢方式,當然也可以改為其它策略)。
訪問消費端的方法http://localhost:3000/consumer/getName,訪問兩次。
可以看到兩個實例分別都被調用到了一次,這樣我們就實現了在消費者端用ribbon對服務調用的負載均衡。
智能推薦
二.、SpringCloud服務消費者(rest+ribbon)
一、ribbon簡介 負載均衡是對系統的高可用、網絡壓力的緩解和處理能力擴容的重要手段之一。 目前主流的負載方案分為兩種,一種是集中式負載均衡,在消費者和服務提供方中間使用獨立的代理方式進行負載,有硬件的,比如F5,也有軟件的,比如Nginx。另一種則是客戶端自己做負載均衡,根據自己的請求情況做負載,Ribbon就是屬于客戶端自己做負載的。 ribbon是一個負載均衡客戶端,可以很好的控制htt和...
SpringCloud - (二)服務消費者(ribbon+restTemplate)
在微服務架構中,業務都會被拆分成一個獨立的服務,服務與服務的通訊是基于http restful的。 Spring cloud有兩種服務調用方式: 一種是ribbon+restTemplate 一種是feign 這里先學習ribbon+restTemplate Ribbon ribbon是一個負載均衡客戶端,可以很好的控制htt和tcp的一些行為。 Feign默認集成了ribbon。 準備工作 創建...
SpringCloud教程二:服務消費者(rest+ribbon)
在微服務架構中,服務與服務的通訊是基于http restful的。Spring cloud有兩種服務調用方式,一種是ribbon+restTemplate,另一種是feign。在這一篇文章首先講解下基于ribbon。 1:ribbon簡介 ribbon是一個負載均衡客戶端,可以很好的控制htt和tcp的一些行為。Feign默認集成了ribbon。 ribbon 已經默認實現了這些配置bean: I...
SpringCloud之服務提供者與消費者
提供者提供服務,將服務注冊到注冊中心,消費者到注冊中心消費服務 一.提供者 1.pom文件: 2.application.yml 3.提供者方法 4.啟動類加上注解 5.啟動并刷新注冊中心,觀察服務是否注冊成功 二、消費者 1.pom文件 2.application.yml 3.消費者Controller與Service 4.啟動類加上注解 并向IOC容器中添加RestT...
SpringCloud(四)服務發現與消費:以ribbon為例
說明: ribbon是spring-cloud中作為服務消費者的一種角色,客戶端可以通過它來對服務提供者的服務進行消費, 比如本例中是服務提供者注冊到注冊中心,服務提供者提供了一個服務接口,返回一個hello字符串,我們通過ribbon將這個接口調用,再不暴露真實服務提供者的地址的同時,獲取服務提供者的服務 前提: 按照之前幾個教程,搭建出注冊中心、服務提供者。這里可以使用分片的注冊中心,也可以不...
猜你喜歡
二、SpringCloud的學習之服務提供者和服務消費者的演示(基礎)
一、背景 1.創建demo-member-service項目(服務提供者),上篇文章已經部署好了Eureka,詳細請參考:https://blog.csdn.net/chenmingxu438521/article/details/90513283 二、項目結構 三、服務提供者詳細項目講解 1.pom.xml 2.application.yml 2.1.需要指明spring.application...
SpringCloud學習記錄(一)第一個服務提供者與服務消費者
參考資料:《SpringCloud與Docker微服務架構實戰》 服務提供者:服務的被調用方(即:為其他服務提供服務的服務) 服務消費者:服務的調用方(即:依賴其他服務的服務) 用戶購票時,向電影微服務發起一個購票請求,在進行購票的業務操作前,電影微服務需要調用用戶微服務的接口,查詢當前用戶的余額是多少,是不是符合購票標準等。 在這個例子中,用戶微服務就是一個服務提供者,電影微服務則...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...