avant-propos
Cet article présente principalement que SpringCloud utilise Nacos comme centre de configuration et centre d'enregistrement, apprend la configuration de base de Naocs via une simple démo et effectue des appels d'interface entre différents microservices via RestTemplate et openfeign.
Configuration de l'installation Nacos
Les ressources d'apprentissage de Nacos comprennent principalement les deux éléments suivants
- Réseau de canalisations Nacos Réseau de canalisations Nacos
- Nacos GitHub NacosGitHub
Télécharger Nacos
Téléchargez la version correspondante de Nacos directement depuis GitHub https://github.com/alibaba/nacos/releases . Cet article utilise 2.1.0. S'il n'y a pas d'accélération GitHub, vous pouvez la télécharger directement depuis CSDN. Je l'ai téléchargée, complètement gratuit et aucun point n'est requis https: //download.csdn.net/download/whzhaochao/88074308
Démarrer les NAOC
Si startup.cmd
la configuration dans la modification de Windows set MODE="standalone"
est configurée en mode autonome, cliquez sur startup.cmd
Exécuter pour activer Nacos ou utilisez pour startup.sh -m standalone
spécifier le mode de démarrage.
Lorsque nous voyons 8848, cela signifie que le démarrage a réussi. Entrez http://127.0.0.1:8848/nacos/ dans le navigateur , nom d'utilisateur nacos, mot de passe nacos pour vous connecter à Nacos.
configurer nacos
Après être entré dans Nacos, plusieurs concepts doivent être brièvement expliqués
Espaces de noms
Il peut être compris comme des environnements différents. Par exemple, dev/test/prod correspond à développement/test/officiel. Nous pouvons créer ces trois environnements séparément. Faites attention à l'identifiant de l'espace de noms (il sera généré automatiquement s'il n'est pas renseigné ). Nous ne le remplirons pas et le laisserons être généré automatiquement.
liste de configurations
La liste de configuration doit remplacer le fichier yml ou les propriétés de notre projet précédent. Nous choisissons l'environnement de développement pour créer un DataID en tant que service utilisateur et un groupe en tant que boutique. Ici, DataID peut être compris comme correspondant à l'un de nos microservices, et Group peut être compris comme l'un de nos projets. Nous faisons un centre commercial, il y aura un centre d'utilisateurs et un centre de commande. Ici, le projet de centre commercial peut être compris comme un groupe et le centre utilisateur peut être compris comme un identifiant de données.
la gestion des services
La gestion des services ici correspond à l'un de nos microservices. Lorsque notre microservice démarrera, il sera automatiquement enregistré ici. Il n'y a pas encore de données
Construction de l'environnement Spring Cloud
Nous faisons une démo très simple, la logique de base est d'activer un centre utilisateur, qui extrait la configuration utilisateur du centre de configuration nacos, puis fournit une interface pour obtenir des informations utilisateur via ID, crée une interface dans le centre de commande et appelle le interface du centre utilisateur Obtenir des informations utilisateur, la structure de base du projet est la suivante :
Ici, nous nous référons au POM avec une note : différentes versions de SpingBoot peuvent ne pas être compatibles avec cloud-alibaba et nacos, nous pouvons télécharger à partir de https://github .com/spring-cloud-incubator/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E Vérifiez la version compatible correspondante
<properties>
<spring-boot-start-web.version>2.3.11.RELEASE</spring-boot-start-web.version>
<spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot-start-web.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
La configuration bootstrap.yml du centre utilisateur
Ici, nous examinons principalement deux configurations clés, nacos.config et nacos.discovery. config est principalement configuré pour extraire les informations de configuration de nacos. Ici, notre préfixe s'applique à notre service utilisateur d'arrière-plan nacos, l'espace de noms correspond à notre environnement de développement et le groupe correspond à notre boutique de projet.
server:
port: 82
spring:
profiles:
active: dev
application:
name: user-service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
group: shop
enabled: true
prefix: user-service
namespace: 6835622b-e819-4a78-a4d0-3fdc12b29ae9
file-extension: yaml
discovery:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
namespace: 6835622b-e819-4a78-a4d0-3fdc12b29ae9
group: shop
Paramétrage des dépendances
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
Jetons un coup d'œil à UserConfig
cette classe, à travers laquelle nous pouvons extraire les données users.list configurées dans nacos.
@Configuration
@ConfigurationProperties("users")
@Data
public class UserConfig {
private List<User> list;
}
Jetons un coup d'œil UserController
Cette classe fournit un moyen /user/{id}
d'obtenir les informations utilisateur du centre de configuration nacos via l'id.
@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
@Value("${server.port}")
private Integer port;
@Resource
private UserConfig userConfig;
@GetMapping("/{id}")
public User info(@PathVariable Long id){
return userConfig.getList().stream().filter(x->x.getId().equals(id)).peek(x-> x.setPort(port)).findFirst().get();
}
}
Activez le projet nacos-user, lorsque nous démarrons le projet nacos-user, vous pouvez voir le service utilisateur en arrière-plan nacos, le port est 82
Nous pouvons obtenir avec succès les informations de configuration de nacos via l'adresse IP et le port http://192.168.1.103:82/user/1 affichés sur nacos
Centre de commande
Configuration du centre de commande
server:
port: 81
spring:
profiles:
active: dev
application:
name: order-service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
group: shop
enabled: true
prefix: order-service
namespace: 6835622b-e819-4a78-a4d0-3fdc12b29ae9
file-extension: yaml
discovery:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
namespace: 6835622b-e819-4a78-a4d0-3fdc12b29ae9
group: shop
Paramétrage des dépendances
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
Centre de commande, dans le centre de commande nous avons écrit deux interfaces /order/{id}
en restTempate
appelant l'interface du centre utilisateur et /order/feign/{id}
en openFeign
appelant l'interface du centre utilisateur. Il convient de noter ici qu'il RestTemplate
faut l'ajouter dans la configuration @LoadBalanced
, sinon l'adresse de l'interface ne sera pas être trouvé, et il sera utilisé après l'avoir ajouté ribon
L'équilibrage de charge ribon
trouvera l'adresse de service correspondante à partir du centre d'enregistrement via le service utilisateur.
@RestController
@RequestMapping("/order")
public class OrderController {
@Resource
private RestTemplate restTemplate;
@Resource
private UserFeign userFeign;
@GetMapping("/{id}")
public User info(@PathVariable Long id){
return restTemplate.getForObject("http://user-service/user/".concat(id.toString()), User.class);
}
@GetMapping("/feign/{id}")
public User feign(@PathVariable Long id){
return userFeign.getUser(id);
}
}
@Configuration
public class RestTempleteConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@FeignClient(value = "user-service")
@Component
public interface UserFeign {
@GetMapping("user/{id}")
User getUser(@PathVariable Long id);
}
Démarrer nacos-order
, il y aura l'un des services nacos order-service
, nous accédons à l'interface correspondante via l'IP et le port, et terminons l'appel au service du centre utilisateur
Entrez http://192.168.1.103:81/order/1 Appelez l'interface du centre utilisateur via restTempate Entrez
http : //192.168.1.103:81/order/feign/2 appelle l'interface du centre utilisateur via openFeign
Ici, nous copions la configuration de démarrage du service utilisateur et écrasons et service.port
démarrons deux services utilisateur
Vous pouvez voir qu'il existe deux instances de service utilisateur d'arrière-plan nacos
Lorsque le service de commande est appelé, il est fourni par différents services utilisateurs pour réaliser l'équilibrage de charge.
enfin
Cet article est nacos
une introduction à l'apprentissage, et plus nacos
de contenu connexe sera appris plus tard
Code source du projet : https://gitee.com/whzhaochao/nacos-study