一個服務提供者 一個消費者 一個註冊中心
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);
}
}
工程結構:
測試截圖:
手工客戶端測試截圖:
到此結束。
需要源碼,可以留言獲取。