@PostMapping с другими микросервисами с помощью Feign и Eureka - PullRequest
0 голосов
/ 21 марта 2019

Я строю микросервисную архитектуру с помощью Spring Framework, Feign и Eureka.

  • Магазин работает как API-шлюз, реализованный с помощью Zuul (без базы данных)
  • Каждый микросервис имеетего собственная база данных h2.
  • Служба CustomerService может вызывать сопоставления корзины с помощью Feign

Пример: У меня есть "Магазин", и я хочу создать покупателя с корзиной в одном методе вСам сервис.

Как я могу вызывать методы в ShopService, чтобы управлять другими Сервисами без связи с другими сервисами?Пожалуйста, дайте мне знать, если вам нужны примеры кода.

CustomerController.java:

@ComponentScan
@RestController
public class CustomerController {

    final Customer2CartConnectorRequester customer2CartConnectorRequester;
    final Customer2OrderConnectorRequester customer2OrderConnectorRequester;

    @Autowired
    private CustomerJpaRepository customerJpaRepository;

    @Autowired
    public CustomerController(Customer2CartConnectorRequester customer2CartConnectorRequester,
            Customer2OrderConnectorRequester customer2OrderConnectorRequester) {
        this.customer2CartConnectorRequester = customer2CartConnectorRequester;
        this.customer2OrderConnectorRequester = customer2OrderConnectorRequester;

    }

    @GetMapping("/list")
    @ResponseBody
    public List<CustomerEntity> getCustomers() {

        return customerJpaRepository.findAll();
    }


    @RequestMapping("/{customerId}")
    @ResponseBody
    public Optional<CustomerEntity> getCustomer(@PathVariable("customerId") int customerId) {

        return customerJpaRepository.findById(customerId);
    }

    // Client to Server
    // POST über z.B. Postman Client
    @PostMapping("/customer")
    public CustomerEntity addCustomer(@RequestBody CustomerEntity customerEntity) {

        customerJpaRepository.save(customerEntity);

        return customerEntity;
    }

    @DeleteMapping("customer/{customerId}")
    public String deleteCustomer(@PathVariable int customerId) {

        CustomerEntity a = customerJpaRepository.getOne(customerId);
        customerJpaRepository.delete(a);

        return "deleted";
    }

    @PutMapping("/customer")
    public CustomerEntity updateCustomer(@RequestBody CustomerEntity customerEntity) {

        customerJpaRepository.save(customerEntity);

        return customerEntity;
    }

    /// CONNECTOR REQUESTER ///

    @GetMapping("/cart")
    public List<?> getCart() {
        return customer2CartConnectorRequester.getCart();
    }

    @GetMapping("/orders")
    public List<?> getOrders() {
        return customer2OrderConnectorRequester.getOrders();
    }

}

Обновление: Я пытался использовать POST-методотправлять данные через Postman Client следующим образом, но, похоже, все еще что-то не так:

Shop2CustomerConnectorRequester:

@FeignClient("customermicroservice")
public interface Shop2CustomerConnectorRequester {

    @RequestMapping(value = "/list", method = RequestMethod.POST)
    public ResponseEntity<String> createCustomer(Map<String, ?> queryMap);
}

ShopController:

@ComponentScan
@RestController
public class ShopController {

    final Shop2CustomerConnectorRequester shop2CustomerConnectorRequester;

    @Autowired
    private ShopJpaRepository shopJpaRepository;

    @Autowired
    public ShopController(Shop2CustomerConnectorRequester shop2CustomerConnectorRequester) {
        this.shop2CustomerConnectorRequester = shop2CustomerConnectorRequester;

    }

    @GetMapping("/customer")
    public  ResponseEntity<String> createCustomer(Map<String, ?> queryMap) {
        return shop2CustomerConnectorRequester.createCustomer(queryMap);
    }


}
...