1、springcloud基于feign的调用 2、ribbon+restTemplate的调用
第一步:引入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注册中心,会看到对应的两个服务,如下图所示 访问服务的消费端,可以看到被调用的服务的内容,说明服务调用成功
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用来解决负载均衡问题 通过注入的方式实现调用,如下图所示:
