- 服务消费者:(调用两种方式:restTemplete和Feign)
1、springcloud基于feign的调用
2、ribbon+restTemplate的调用
下面是基于Feign的调用方式的介绍
第一步:引入pom依赖:
spring-cloud-starter-eureka,spring-cloud-starter-feign(主要依赖)
,spring-boot-starter-web
<?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">
<parent>
<artifactId>springcloud_myproject</artifactId>
<groupId>com.idea</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud_provider</artifactId>
<packaging>war</packaging>
<name>springcloud_provider Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--eureka server-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<!-- spring boot test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>springcloud_provider</finalName>
</build>
</project>
第二步:创建入口类:使用注解@EnableFeignClients启用feign客户端
@SpringBootApplication
@EnableDiscoveryClient
//使用注解@EnableFeignClients启用feign客户端
@EnableFeignClients
public class FeignApplication {
public static void main(String[] args) {
SpringApplication.run(FeignApplication.class,args);
}
}
第三步:编写配置文件 application.yml
server:
port: 8079
spring:
application:
name: feign-client
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
第四步:创建一个interface接口
- @FeignClient:代表是使用的feign调用方式
- @RequestParam:表示传入的参数,不能省略
@FeignClient("HELLO-CLIENT")//被调用的服务在注册中心的注册名
public interface HelloService {
@RequestMapping("/user/hello")//被调用的服务所对应的接口的访问路径
public String hello(@RequestParam("name") String name);//@RequestParam不能省略,表明传入的参数
}
第五步:创建controller,进行服务之间的调用
@RestController
@RequestMapping("/show")
public class ShowHelloController {
// 注入写的接口,直接进行服务的调用
@Autowired
private HelloService helloService;
@RequestMapping("/hello")
public String hello(String name){
return helloService.hello(name);
}
}
访问eureka注册中心,会看到对应的两个服务,如下图所示
访问服务的消费端,可以看到被调用的服务的内容,说明服务调用成功
restTemplate+ribbon的调用方式
ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。Feign默认集成了ribbon。
第一步:引入依赖:spring-cloud-starter-ribbon(软负载均衡)
、spring-boot-starter-web、spring-cloud-starter-eureka-server
<?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">
<parent>
<artifactId>sprindcloud_demo</artifactId>
<groupId>com.ideal</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>springcloud_restTemplete_client</artifactId>
<packaging>war</packaging>
<name>springcloud_restTemplete_client Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</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>
<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.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
</dependencies>
<build>
</build>
</project>
调用方法一:通过模板直接调用
调用方法二:通过eureka中的注册名获取本地ip和端口
调用方法三:先在入口类中添加配置,然后在controller中引用(一般用方法三的比较多)
或者直接创建实体类代替入口类上的那段配置:@LoadBalanced用来解决负载均衡问题
通过注入的方式实现调用,如下图所示: