Nacos作为服务注册中心简单示例

news2024/10/7 11:31:45

一、服务注册与发现场景

主要包含两个服务:

  • zhshl-order服务: 作为服务消费者
  • zhsl-stock服务: 作为服务提供者

当我们启用服务发现的时候,需要进行的操作主要有三步

0、前置条件,需要先搭建好一个nacas服务,可以是一个集群或者是单个nacos服务。可以参考https://nacos.io/zh-cn/docs/quick-start.html,

示例中使用需要使用nacos1.4.2版本匹配。具体配置关系可以参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

1、添加maven依赖

     <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
     </dependency>

2、配置服务提供者,将服务注册到nacos中,后续通过

2.1 在bootstrap.yml的配置文件中配置nacos的地址
spring:
  cloud:
    nacos:
      discovery:
        service: zhshl-stock
        server-addr: localhost:8848

server:
  port: 8081
2.2 通过 Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能:
@SpringBootApplication
@EnableDiscoveryClient
public class ZhslStockApplication {

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

@RestController
public class StockController {
    @Value("${server.port}")
    private String port;

    @GetMapping("/stock/reduce/{productId}")
    public String reduce(@PathVariable Integer productId) {
        System.out.println("减库存成功");
        return "减库存成功,响应的是: " + port;
    }
}

3、配置消费者,消费通过nacos的服务发现功能,从nacos中获取到对应的服务提供者的具体实例来进行调用

3.1、服务消费者对应的配置信息:
spring:
  cloud:
    nacos:
      discovery:
        service: zhshl-stock
        server-addr: localhost:8848

server:
  port: 18082
3.2、 消费者的配置启用服务发现
@SpringBootApplication
@EnableDiscoveryClient
public class ZhshlOrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZhshlOrderApplication.class, args);
    }
}
@Configuration
public class AppConfig {
    @Autowired
    private LoadBalancerClient loadBalancerClient;
    @Bean
    //@LoadBalanced
    public RestTemplate restTemplate(){
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setInterceptors(Collections.singletonList(new LoadBalancerInterceptor(loadBalancerClient)));
        return restTemplate;
    }
}
@Slf4j
@RestController
public class OrderController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/order/create")
    public String createOrder(Integer productId, Integer userId) {

        String result = restTemplate.getForObject("http://zhshl-stock/stock/reduce/" + productId, String.class);
        return "下单成功,库存响应: " + result;
    }
}

4、启动服务提供者(zhsl-stock)和服务消费者(zhshl-order)

4.1、两个服务启动后,可以在nacos的控制平台上看到如下信息

在这里插入图片描述

4.2 在浏览器上输入http://localhost:8082/order/create?productId=10,然后可以到如下的输出:

下单成功,库存响应: 减库存成功,响应的是: 18082
在这里插入图片描述
文章使用到的源码请见:https://github.com/zhang1github2test/nacos-zhshl-parent/tree/master

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 数据定义语言 DDL

文章目录 数据定义语言 DDL表的设计范式第一范式&#xff08;1NF&#xff09;第二范式&#xff08;2NF&#xff09;第三范式&#xff08;3NF&#xff09; 创建表修改表删除表截断表 数据定义语言 DDL 前面我们学习的 DML 语言&#xff0c;主要实现对数据的增、删、改等基本操作…

零基础入门网络安全必看的5本书籍(附书单pdf)

作为一个Java转行网络安全的过来人&#xff0c;我深知自学时的种种不易&#xff0c;同时也经常有粉丝朋友问我&#xff1a;刚入门应该怎么学、有哪些书籍推荐等问题&#xff0c;今天我就把我自己的学习书单分享给大家&#xff0c;希望对大家有帮助&#xff01; 一、5本必读书籍…

JVM垃圾回收——对象进入老年代

目录 1、什么是大对象以及大对象对垃圾回收的影响 2、什么情况下对象会进入老年代 2.1 当创建对象的大小超过-XX:PretenureSizeThreshold的设定值 2.2 长期存活的对象将进入老年代 2.3 动态年龄判定 2.4 空间担保分配 什么是空间分配担保&#xff1f; 为什么要…

uploads靶场通关(1-11关)

Pass-01&#xff08;JS校验&#xff09; 看题目我们准备好我们的php脚本文件&#xff0c;命名为1.php 上传该php文件&#xff0c;发现上传失败 方法一&#xff1a;将浏览器的JavaScript禁用 然后就能上传了 方法二&#xff1a; 查看源码&#xff0c;发现只能上传以下形式的文…

【Docker】LXC所实现的隔离性、Linux Namespace等讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

域名解析异常有哪些办法?如何实现动态域名解析?

什么是域名解析&#xff1f; 域名解析就是把域名解析成一个ip地址&#xff0c;我们大多数人都喜欢记忆域名&#xff0c;但是机器只认识IP地址&#xff0c;只要这个IP地址对应相关域名&#xff0c;这就叫域名解析。 工作中常会遇到域名解析故障&#xff0c;比如访问站点对应的…

FPGA问答系列--Vivado Schematic中的实线和虚线有什么区别?

FPGA问答系列–Vivado Schematic中的实线和虚线有什么区别&#xff1f; 前言&#xff1a;本文章为FPGA问答系列&#xff0c;我们会定期整理FPGA交流群&#xff08;包括其他FPGA博主的群&#xff09;里面有价值的问题&#xff0c;并汇总成文章&#xff0c;如果问题多的话就每周…

ChatPPT一键制作PPT,效果拉满!

&#x1f4a7; C h a t P P T 一键制作 P P T &#xff0c;效果拉满&#xff01; \color{#FF1493}{ChatPPT一键制作PPT&#xff0c;效果拉满&#xff01;} ChatPPT一键制作PPT&#xff0c;效果拉满&#xff01;&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我…

阿里云nginx配置https踩坑(配置完后访问显示无法访问此网站)

本人小前端一枚&#xff0c;最近在玩服务器部署自己的东西时踩了个坑&#xff01;&#xff01;&#xff01; server {listen 443 ssl;server_name localhost;ssl_certificate 证书.com.pem;ssl_certificate_key 证书.com.key;#后台管理静态资源存放location / { #文件目…

2023-06-04 Unity ScriptableObject2——ScriptableObject 的应用

文章目录 一、配置数据二、复用数据三、多态特性的利用四、单例模式获取数据 一、配置数据 ​ ScriptableObject 数据文件非常适合用来做配置文件&#xff1a; 配置文件的数据在游戏发布之前定规则配置文件的数据在游戏运行时只会读出来使用&#xff0c;不会改变内容在 Unity…

MPS|如何学习电路设计?帮你快速上手

​电路设计是电子工程中的重要领域之一&#xff0c;涉及到电子元件的选择、电路的设计和分析、电路板的制作等多个方面。对于初学者来说&#xff0c;学习电路设计需要掌握一定的基础知识和技能&#xff0c;同时需要有耐心和实践经验。本文将从七个方面总结如何学习电路设计&…

Vue (9)

Vue (9) 文章目录 1. 消息订阅与发布1.1 总结1.2 修改 TodoList 案例 2. 为 TodoList 添加编辑功能3. $nextTick4. 过度与动画4.1 动画效果4.2 过度效果4.3 集成第三方动画4.4 总结4.5 修改 TodoList 案例 1. 消息订阅与发布 上文我们已经将全局事件总线学完了知道了全局事件总…

day6 -- 数据的分组和描述性统计

学习内容 描述性统计函数&#xff0c;包括平均值&#xff0c;最大/小值&#xff0c;行数&#xff0c;总和使用 GROUP BY子句和HAVING子句 对数据进行分组操作 描述性统计数函数 除了上面提到的聚合函数外&#xff0c;MySQL还提供了以下其他一些常用的聚合函数&#xff1a; – …

Python学习40:维吉尼亚密码——解密

凯撒密码的加密强度是很低的&#xff0c;只需简单地统计字频就可以破译。人们在单一凯撒密码的基础上扩展出多表密码&#xff0c;称为“维吉尼亚”密码。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪…

【环境搭建】一些奇奇怪怪的环境问题

【设备信息】我的设备是4070ti&#xff0c;支持cuda12.0,但是目前用的还是11.7 1&#xff09;fatal error: cusparse.h: No such file or directory 因为cuda版本和改名的原因&#xff0c;这个在cuda版本中比较有效的解决办法是&#xff1a; sudo apt search libcusparse得到…

基于SpringBoot+Vue的自习室预订系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

C/C++开发,opencv读写图像函数详解

目录 一、cv::imread函数读取图像 1.1 imread函数 1.2 imread函数的参数解析 1.3 imread函数实践案例 1.4 编译及测试 二、cv::imwrite函数存储图像 2.1 cv::imwrite函数 2.2 imwrite函数参数解析 2.3 imwrite函数实践案例 2.4 编译及测试 一、cv::imread函数读取图像 1.1 im…

Lecture 5 Part of Speech Tagging

目录 POS application: Information Extraction 词性应用&#xff1a;信息提取 POS Open Class 开放类词性Problem of word classes: Ambiguity 词类问题&#xff1a;模糊性Tagsets 标记集Penn Treebank Tags:Derived Tags: 衍生标签Tagged Text Example 标记文本示例Reasons f…

Java 字符串基本操作

一、Java 字符串比较 1、equals用法 String类覆盖了Object类的equals()方法&#xff0c;并提供了自己的实现&#xff0c;它根据它们的内容比较两个字符串的相等性。 equals() 方法用于将字符串与指定的对象比较。 语法 public boolean equals(Object anObject)参数 anObje…

Dockerfile常用指令及其含义

编写dockerfile文件中常用指令&#xff1a; 指令说明FROM指明当前的镜像基于哪个镜像构建:LABEL标记镜像信息&#xff0c;添加元数据ARG定义构建镜像过程中使用的变量ENV指定环境变量VOLUME创建一个数据卷挂载点USER指定运行容器时的用户名或 UIDWORKDIR配置工作目录EXPOSE容器…