spring cloud open-feign eureka demo

本文详细介绍了一个基于Feign的微服务通信实例,包括服务提供者、消费者和Eureka注册中心的搭建。通过具体代码展示了如何实现服务间的GET和POST请求,以及手动客户端的调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个服务提供者  一个消费者  一个注册中心

1.注册中心

@SpringBootApplication
@EnableEurekaServer
public class FeignEurekaApplication {

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

配置文件:

server:
  port: 8500
spring:
  application:
    name: feign-eureka
eureka:
  instance:
    hostname: localhost
    preferIpAddress: true
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

工程结构:

2.一个服务提供者

@RestController
@SpringBootApplication
@EnableDiscoveryClient
public class FeignProviderApplication {


    @GetMapping("/getPrint")
    public String getPrint(@RequestParam("content") String content) {
        return "获取到的消息".concat(content);
    }

    @PostMapping("/postPrint")
    public String postPrint(@RequestParam("content") String content) {
        return "postPrint 消息接收".concat(content);
    }


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

配置文件:

server:
  port: 9000
spring:
  application:
    name: feign-provider
eureka:
  instance:
    hostname: localhost
  client:
    serviceUrl:
      defaultZone: http://localhost:8500/eureka/
工程结构:

3.一个消费者

  openfeign客户端调用:

@FeignClient("feign-provider")
public interface PrintService {

    /**
     * 默认使用@RequestBody  get请求需要显示的注明@RequestParam
     * @param content
     * @return
     */
    @PostMapping(value = "/postPrint")
    String postPrint(@RequestParam("content") String content);

    @GetMapping(value = "/getPrint")
    String getPrint(@RequestParam("content")String content);
}

 

openfeigin 手工客户端调用:

ConsumerImpl.java

package com.github.Mint.consumer.service;

import javax.annotation.Resource;

import org.springframework.cloud.openfeign.FeignClientsConfiguration;
import org.springframework.cloud.openfeign.support.SpringMvcContract;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;

import feign.Client;
import feign.Contract;
import feign.Feign;
import feign.codec.Decoder;
import feign.codec.Encoder;

@Component
@Import(FeignClientsConfiguration.class)
public class ConsumerImpl implements IConsum{

    @Resource
    private Client  client;
    
    @Resource
    private Decoder  decode;
    
    @Resource 
    private Encoder  encoder;
    
    @Resource
    private  Contract  contract;
    
    @Override
    public String postPrint(String content) {
        IConsumer consum  = Feign.builder().client(client).decoder(decode).encoder(encoder).contract(contract).target(IConsumer.class,"http://feign-provider");
        return consum.postPrint(content);
    }

    @Override
    public String getPrint(String content) {
        IConsumer consum  = Feign.builder().client(client).decoder(decode).encoder(encoder).contract(contract).target(IConsumer.class,"http://feign-provider");
        return consum.getPrint(content);
    }
}
 

IConsum.java

public interface IConsum {
    /**
     * 模拟post请求
     * @param content
     * @return
     */
     String postPrint(String content);
    

     /**
      * 模拟get请求
      * @param content
      * @return
      */
     String getPrint(String content);
}
IConsumer.java


import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

public interface IConsumer {
     
     @PostMapping("/postPrint")
     String postPrint(@RequestParam("content") String content);
    
     @GetMapping("/getPrint")
     String getPrint(@RequestParam("content")String content);
}
调用入口:

@RestController
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignConsumerApplication {

    @Autowired
    private PrintService printService;
    
    @Autowired
    private IConsum  iconsum;

    @GetMapping("/getPrint")
    public String getPrint(String content) {
        System.out.println(iconsum.getPrint(content));
        return printService.getPrint(content);
    }

    @GetMapping("/postPrint")
    public String postPrint(String content) {
        System.out.println(iconsum.getPrint(content));
        return printService.postPrint(content);
    }

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

 

工程结构:

测试截图:

手工客户端测试截图:

到此结束。

  需要源码,可以留言获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值