SpringCloud - Feindre l'appel à distance 1

Sujet de participation à la phase 2 du Défi thématique du RPSC
: Notes d'étude

Veuillez ajouter une description de l'image
Carte de visite personnelle :

blogueur: Alcooliques ᝰ.
Profil personnel: Offrez-vous du vin et aspirez à un avenir avec un verre.
Cet article est inspirant: Trois personnes marchent, il doit y avoir mon professeur.

Veuillez ajouter une description de l'image
Ce projet est basé sur le programmeur dark horse de la station B Java "SpringCloud Microservice Technology Stack", SpringCloud+RabbitMQ+Docker+Redis+search+distributed

[SpringCloud+RabbitMQ+Docker+Redis+search+distributed, cours détaillé sur la pile de la technologie de microservices springcloud | microservice Java programmeur dark horse] Cliquez pour regarder

1. Feign remplace RestTemplate

Ce qui suit est notre méthode d'accès précédente, qui nécessite de saisir la valeur de l'adresse URL. Cette méthode n'est pas facile à utiliser lorsque la valeur de l'adresse est très longue plus tard, la lisibilité est mauvaise et la maintenance est difficile.

String url = "http://userservice/user/" + userId;
User user = restTemplate.getForObject(url, User.class);

Comme la méthode précédente est difficile à maintenir, nous utilisons Feign à la place.
Comment utiliser:

1. Introduire des dépendances

Introduire une dépendance factice dans orderservice

<!--feign客户端依赖-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2. Activez Feindre

Ajouter l'annotation @EnableFeignClients au service de commande

package cn.itcast.order;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;

@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {

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

3. Écrire un client factice

Créez le module clients dans lequel la classe UserClient est créée.

package cn.itcast.order.clients;

import cn.itcast.feign.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = "userservice")
public interface UserClient {
    
    
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

Analyse : (basée sur SpringMVC)

  • Nom du service : userservice
  • Méthode de requête : GET
  • Chemin de requête : /user/{id}
  • Paramètre de requête : id
  • Type de valeur de retour : Utilisateur

4. Écrire des affaires (service)

package cn.itcast.order.service;

import cn.itcast.feign.clients.UserClient;
import cn.itcast.feign.pojo.Order;
import cn.itcast.feign.pojo.User;
import cn.itcast.order.mapper.OrderMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class OrderService {
    
    

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private UserClient userClient;


    public Order queryOrderByUserId(Long orderId) {
    
    
        //1.根据id查询订单
        Order order = orderMapper.findById(orderId);
        //2.查询user
        User user = userClient.findById(order.getUserId());
        //4.封装查询结果
        order.setUser(user);

        return order;
    }
}

5. Requête (contrôleur)

package cn.itcast.order.web;

import cn.itcast.feign.pojo.Order;
import cn.itcast.order.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("order")
public class OrderController {
    
    

   @Autowired
   private OrderService orderService;

    @GetMapping("/{orderId}")
    public Order queryOrderById(@PathVariable("orderId") Long orderId) {
    
    
        // 1.查询订单
        return orderService.queryOrderByUserId(orderId);
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/m0_65144570/article/details/127138942
conseillé
Classement