spring cloud open-feign eureka demo

一個服務提供者  一個消費者  一個註冊中心

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);
    }
}

 

工程結構:

測試截圖:

手工客戶端測試截圖:

到此結束。

  需要源碼,可以留言獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章