springcloud feign 远程调用

本贴最后更新于 947 天前,其中的信息可能已经事过境迁

项目清单

Feign 需要注册到 eureka 服务中,下面分别建立四个项目

  • eureka-server (spring-cloud-rureka-server-feign) name:eureka-server-feign port:9090
  • parent -feign[父项目] -(spring-cloud-feign) -- 以下项目采用聚合工程
    • feign-api[契约服务] name:feign-api port:8081
    • feign-consumer[服务消费端] name:person-consumer port:8082
    • feign-provider[服务提供方] name:person-provider port:8083

Eureka Server 项目

1.Maven 导入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.Application.java 增加注解

@SpringBootApplication
@EnableEurekaServer //开启eureka server
public class SpringCloudRurekaServerFeignApplication {

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

3.修改 application.properties

server.port = 9090
spring.application.name = eureka-server-feign
eureka.client.fetch-registry = false
eureka.client.register-with-eureka = false
# 开启全部actuator管理
management.endpoints.web.exposure.include=* 

Parent : Feign 项目(spring-cloud-feign)

1.Maven 导入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<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>

2.修改pom

新建 Module : feign-api

1.修改 pom

<parent>
    <groupId>com.blaaair</groupId>
    <artifactId>spring-cloud-feign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

2.Application.java 配置

@SpringBootApplication
@EnableEurekaClient
public class SpringCloudFeignApiApplication {

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

3.application.properties 配置

server.port = 8081
spring.application.name = feign-api
eureka.client.service-url.defaultZone = http://localhost:9090/eureka
management.endpoints.web.exposure.include=*

4.增加接口

@FeignClient("person-provider") //person-provider : 接口提供方应用名称
public interface PersonService {

    @PostMapping("/person/save")
    boolean save(@RequestBody Person person);
}

新建 Module :feign-consumer

1.修改 pom

<parent>
    <groupId>com.blaaair</groupId>
    <artifactId>spring-cloud-feign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

需在依赖中增加 feign-api

2.Application.java 配置

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(clients = PersonService.class) //接受暴露出的
public class SpringCloudFeignApiApplication {

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

3.application.properties 配置

server.port = 8082
spring.application.name = person-consumer
eureka.client.service-url.defaultZone = http://localhost:9090/eureka
management.endpoints.web.exposure.include=*

4.增加调用远程 service 的 controller

@RestController
public class PersonController implements PersonService {

    private final PersonService personService;

    @Autowired
    public PersonController(PersonService personService) {
        this.personService = personService;
    }

    @Override
    public boolean save(Person person) {
        return personService.save(person);
    }
}

新建 Module : feign-provider

1.修改 pom

<parent>
    <groupId>com.blaaair</groupId>
    <artifactId>spring-cloud-feign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

需在依赖中增加 feign-api

2.Application.java 配置

@SpringBootApplication
@EnableEurekaClient
public class SpringCloudFeignApiApplication {

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

3.application.properties 配置

server.port = 8083
# 这里的name 与feign-api中@FeignClient("person-provider")对应
spring.application.name = person-provider
eureka.client.service-url.defaultZone = http://localhost:9090/eureka
management.endpoints.web.exposure.include=*

4.提供的调用 controller

@RestController
public class PersonController {

    @PostMapping("/person/save")
    boolean save(@RequestBody Person person){
        return new HashMap<>().put(person.getId(),person)==null;
    }
}

测试

  1. 分别启动项目:eureka-server - > feign-provider - > feign-api - > feign-consumer

  2. POSTMAN : localhost:8082/person/save ,

  • raw:
{
	id:1,
	name:"ws"
}
  1. 返回:true 则表示成功!
  2. 调用顺序 : postman --> consumer --> provider
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:PipeSoloSymWide 等。

    1114 引用 • 3443 回帖 • 468 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    858 引用 • 1420 回帖 • 618 关注
  • Feign
    8 引用

广告 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...