springCloud(六) OpenFeign声明式通信

1.Feign 和 openFeign 的区别

1.1 Feign 是一个开源声名式WebService框架 ,用于简化服务通信
1.2 Feign 采用 “接口” + "注解" 方式开发,屏蔽了网络通信的细节
1.3 OpenFeign 是springCloud 对 Feign 的加强,支持 SpringMav注解

2.配置文件

2.1 pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.0.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.itlaoqi.springcloud</groupId>
	<artifactId>member-service-openfeign</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>member-service-openfeign</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
	</properties>

	<repositories>
		<repository>
			<id>aliyun-nexus</id>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		</repository>
		<repository>
			<id>aliyun-public</id>
			<url>https://maven.aliyun.com/repository/public</url>
		</repository>

		<repository>
			<id>aliyun-jcenter</id>
			<url>https://maven.aliyun.com/repository/jcenter</url>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>aliyun-plugin</id>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</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>

2.2 application.yml

server:
  port: 9080
spring:
  application:
    name: member-service-openfeign
eureka:
  client:
    service-url:
      defaultZone:
        http://localhost:8761/eureka/

2.3 MemberServiceOpenfeignApplication.java

@SpringBootApplication
@EnableFeignClients
public class MemberServiceOpenfeignApplication {

	//负载均衡
	@Bean
	public IRule ribbonRule(){
		return new RandomRule();
	}

	public static void main(String[] args) {
		SpringApplication.run(MemberServiceOpenfeignApplication.class, args);
	}

}

2.4 接口使用

package com.itlaoqi.springcloud.memberserviceopenfeign.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

//http://book-service/test?XXX
@FeignClient(name = "book-service")
public interface BookService {

    @GetMapping("/test")
    public Map<String,Object> test(@RequestParam("param")String param);

}

2.5 controller 调用

package com.itlaoqi.springcloud.memberserviceopenfeign.controller;

import com.itlaoqi.springcloud.memberserviceopenfeign.client.BookService;
import com.netflix.discovery.converters.Auto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

// 注意写 produces = {"application/json;charset=UTF-8"} ,否则返回xml格式
@Controller
@RequestMapping(value="/book",produces = {"application/json;charset=UTF-8"})
public class MemberController {

    @Autowired
    private BookService bookService;

    @GetMapping("/test")
    @ResponseBody
    public Map<String,Object> test(@RequestParam("param")String param){
        return bookService.test(param);
    }
}

posted on 2020-06-01 22:39  顾~小诺  阅读(481)  评论(0编辑  收藏  举报

导航