SpringCloud的服務(wù)調(diào)用方式
1.基于ribbon-restTemplate的調(diào)用方式
ribbon是一個(gè)很好的負(fù)載均衡客戶端优妙,可以很好的控制http和tcp的行為
他也是我們今天要使用的服務(wù)調(diào)用方式功咒。
2.基于Feign的服務(wù)調(diào)用方式
feign默認(rèn)集成了ribbon
基于上一篇搭建好的基于Eureka注冊(cè)中心的小項(xiàng)目繼續(xù)進(jìn)行消費(fèi)者和生產(chǎn)者的調(diào)用搭建
我們新建一個(gè)springboot項(xiàng)目作為我們的負(fù)載均衡客戶端向注冊(cè)中心注冊(cè)年枕。
創(chuàng)建出來的pom文件如下
<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>
<parent>
<groupId>com.springcloud</groupId>
<artifactId>com.springcloud.example</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>eurekaRibbon</artifactId>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.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>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.2.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.RC1</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>
接下來是我們的application.yml的配置,我們向注冊(cè)中心注冊(cè)客戶端的基本操作
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8764
spring:
application:
name: service-ribbon
下一步我們開始編寫我們的springboot啟動(dòng)類
包結(jié)構(gòu)如下芳悲,啟動(dòng)類沒有配置從哪里掃描的話贮喧,默認(rèn)從自己的子目錄下掃描栅盲,所以我放在最頂級(jí)包
啟動(dòng)類如下
@SpringBootApplication
//標(biāo)識(shí)我們?yōu)榭砂l(fā)現(xiàn)的客戶端
@EnableDiscoveryClient
public class EurekaRibbonApplication {
public static void main(String[] args) {
//啟動(dòng)類啟動(dòng)我們?cè)擁?xiàng)目掷邦,加載application.yml配置文件
SpringApplication.run(EurekaRibbonApplication.class, args);
}
//配置bean
@Bean
//開啟負(fù)載均衡
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
controller層
/**
* @author zzy65
* 消費(fèi)者的controller
*/
@RestController
public class HelloController {
@Autowired
private HelloService helloService;
@RequestMapping("/hello")
public String sayHello(@RequestParam String name){
return helloService.sayHello(name);
}
}
service層 接口就不貼出來了
@Service
public class HelloServiceImpl implements HelloService {
@Autowired
private RestTemplate restTemplate;
public String sayHello(String name) {
//調(diào)用生產(chǎn)者的服務(wù)返回信息
return restTemplate.getForObject("http://SERVICE-SAYHI/hi?name="+name, String.class);
}
}
接下來我們啟動(dòng)項(xiàng)目白胀,先啟動(dòng)昨日的注冊(cè)中心。
啟動(dòng)了一個(gè)注冊(cè)中心抚岗,兩個(gè)生產(chǎn)者的實(shí)例
然后我們啟動(dòng)我們的ribbon開啟負(fù)載均衡
這里如果按照我的pom文件的話或杠,應(yīng)該會(huì)報(bào)錯(cuò),加一個(gè)jackson的包就好了宣蔚,因?yàn)橛昧藃estController注解向抢,是默認(rèn)的使用了jackson包的认境。
這里由于我的誤操作,ribbon第一次啟動(dòng)沒有成功挟鸠,進(jìn)入了保護(hù)模式叉信,上一篇文章有解決方案。
總之到了最后我們終于成功啟動(dòng)了艘希,接下來訪問下試試硼身。
連續(xù)訪問了兩次,是兩個(gè)不同的端口號(hào)覆享,證明負(fù)載均衡是成功了佳遂,而我連續(xù)的訪問多幾次發(fā)現(xiàn)是端口交替出現(xiàn)的,我猜測(cè)負(fù)載均衡的默認(rèn)策略是輪詢淹真。
以下是現(xiàn)在整個(gè)項(xiàng)目的架構(gòu)圖讶迁。
今天學(xué)會(huì)了markdown插入代碼和一些命令,很開心核蘸。另外送自己一句話巍糯,一直警示自己吧。
大多數(shù)人25歲就已經(jīng)死了客扎,75歲才埋葬祟峦。