• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 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對服務調用的負載均衡。


    版權聲明:本文為u011890101原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/u011890101/article/details/77206665

    智能推薦

    二.、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微服務架構實戰》   服務提供者:服務的被調用方(即:為其他服務提供服務的服務) 服務消費者:服務的調用方(即:依賴其他服務的服務) 用戶購票時,向電影微服務發起一個購票請求,在進行購票的業務操作前,電影微服務需要調用用戶微服務的接口,查詢當前用戶的余額是多少,是不是符合購票標準等。 在這個例子中,用戶微服務就是一個服務提供者,電影微服務則...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡