微服务学习2——利用nacos实现服务治理

news2024/11/25 1:04:37

(本文参考黑马程序员项目)
个人仓库地址:https://gitee.com/jkangle/springboot-exercise.git

1.当前项目中存在的问题

不同微服务之间的调用通过硬编码的形式,这样可能在需要打量修改的时候出现问题,因此引入了服务治理的概念。服务治理可以实现微服务的自动化注册与发现

nacos是一个常见的服务注册中心

2.nacos的搭建

  • 下载安装包zip
  • 解压进入到bin
  • 执行startup.cmd -m standalone
  • 启动成功
  • 打开浏览器输入http://localhost:8848/nacos,即可访问服务, 默认密码是nacos/nacos

为了方便启动可以将启动写成一个bat文件,下次启动的时候只需要双击启动文件即可

D:
cd D:\environments\nacos\nacos\bin
startup.cmd -m standalone

在这里插入图片描述

3.将各个模块放入到nacos中

3.1在父模块中添加需要的版本信息(一定要注意版本号)

版本号文档
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>


    <packaging>pom</packaging>
    <modules>
        <module>shop-common</module>
        <module>shop-users</module>
        <module>shop-product</module>
        <module>shop-order</module>
    </modules>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <spring-boot.version>2.6.13</spring-boot.version>
        <spring-cloud.version>2021.0.5</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
        <fastjson.version>1.2.57</fastjson.version>
    </properties>

    <dependencyManagement>
        <dependencies>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.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>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>${fastjson.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

</project>
3.2将商品模块放到nacos中

添加依赖,修改配置文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>test</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>shop-product</artifactId>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

</project>

配置文件

server:
  port: 8081

spring:
  application:
    name: service-product
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?characterEncoding=UTF-8
    username: root
    password:
  jpa:
    properties:
      hibernate:
        hbm2ddl:
          auto: update
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect


3.3将订单模块放到nacos中

订单模块同理

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>test</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>shop-order</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>shop-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>

    </dependencies>

</project>
server:
  port: 8091

spring:
  application:
    name: service-order
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/shop?characterEncoding=UTF-8
    username: root
    password:

  jpa:
    properties:
      hibernate:
        hbm2ddl:
          auto: update
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect

4.现在利用nacos进行调用

修改controller代码即可

package org.example.controller;

import com.alibaba.fastjson.JSON;
import org.example.service.OrderService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import pojo.Order;
import pojo.Product;

/**
 * 使用restTemplate对象调用shop-product的请求方法
 */
@RestController
public class OrderController {
    private static final Logger log = LoggerFactory.getLogger(OrderController.class);
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private OrderService orderService;

    @Autowired
    private DiscoveryClient discoveryClient;

    @GetMapping("/order/prod/{pid}")
    public Order order(@PathVariable("pid") Integer pid){
        ServiceInstance serviceInstance = discoveryClient.getInstances("service-product").get(0);
        String url = serviceInstance.getHost() + ":" +serviceInstance.getPort();
        Product product = restTemplate.getForObject("http://" +url + "/product/"+ pid, Product.class);
        log.info(">>商品信息,查询结果:" + JSON.toJSONString(product));
        Order order = new Order();
        order.setOid(2);
        order.setUid(2);
        order.setPid(product.getPid());
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        order.setNumber(2);
//        orderService.save(order);
        return order;
    }

}

在这里插入图片描述

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

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

相关文章

新版Grafana仪表盘

一 Grafana 是什么 Grafana 是一个开源的指标量监测和可视化工具&#xff0c;常用于展示基础设施的时序数据和应用 程序运行分析。 官网指路&#xff1a; https://grafana.com/ 与前文相关的两个概念&#xff1a; 1&#xff09;数据源&#xff08;Datasource&#xff09;&…

Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE

Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布) 7 月 5 日&#xff08;北京时间今日凌晨&#xff09;已发布。 IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接&#xff1a;https://sysin.org/blog/apple-xcode-15/&#xf…

macOS Sonoma 14 beta 3 (23A5286g) ISO、IPSW、PKG 下载

macOS Sonoma 14 beta 3 (23A5286g) ISO、IPSW、PKG 下载&#xff0c;7 月 5 日&#xff08;北京时间今日凌晨&#xff09;已发布 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安…

【PyQt5】构建强大的Python图形用户界面应用程序 -- 入门指南

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

微服务学习3——利用sentinel实现服务器的容错

1.Sentinel服务器容错 &#xff08;本文参考黑马程序员项目&#xff09; 个人仓库地址&#xff1a;https://gitee.com/jkangle/springboot-exercise.git 在服务器中&#xff0c;由于网络原因可能会出现线程阻塞的情况&#xff0c;当线程阻塞的时候如果有大量的请求涌入&#x…

echarts滚动条样式修改

1.修改的样式如下&#xff1a; 2.相关代码 // 基于准备好的dom&#xff0c;初始化echarts实例 const myChart echarts.init(this.$refs.tasksChart) // 绘制图表 myChart.setOption({grid: {top: 4%,left: 12%,right: 4%,bottom: 23%},// tooltip: {// formatter: {b} {c…

【ElasticSearch】JavaRestClient实现索引库和文档的增删改查

文章目录 一、RestClient1、什么是RestClient2、导入demo工程3、数据结构分析与索引库创建4、初始化JavaRestClient 二、RestClient操作索引库1、创建索引库2、删除索引库3、判断索引库是否存在 三、RestClient操作文档1、新增文档2、查询文档3、删除文档4、修改文档5、批量导入…

视觉SLAM-光流法

文章目录 目录 前言 &#x1f31f;光流法的基本原理 &#x1f31f;OpenCV中的光流法实现 &#x1f31f;光流法的应用 &#x1f31f;代码实现 &#x1f349;OpenCV代码 &#x1f349;OpenCV代码 &#x1f31f;总结 前言 当我们观察一个视频或连续帧的图像时&#xff0c…

【Bubbliiiing视频记录】Pytorch 搭建自己的Unet语义分割平台

来源 b站 地址 什么是语义分割 语义分割&#xff1a;对图像每个像素点进行分类 常见神经网络处理过程&#xff1a;Encoder提取特征&#xff0c;接着Docoder恢复成原图大小的图片 UNet整体结构 分为三个部分 主干特征提取部分&#xff1a; 卷积和最大池化的堆叠获得五个初…

Snail-Camunda

gitee地址&#xff1a;snail-camunda 当前版本&#xff1a;V1.0 &#x1f496;&#x1f496;&#x1f496;希望大家动动发财的小手帮忙star一下&#xff0c;感谢&#xff01; ⭐项目介绍 本项目是对Camunda接口…

data和filter协议文件包含

实验目的 通过本实验&#xff0c;了解php封装伪协议&#xff0c;掌握filter协议和data协议的用法 实验环境 操作机&#xff1a;kali 靶机&#xff1a;Windows Server 2003 实验地址&#xff1a;http://靶机ip/exp/include2/filter/ http://靶机ip/exp/include/include3.php…

【C++ OJ练习】1.求和

1.题目链接 求123...n_牛客题霸_牛客网 2.解题思路 利用C构造函数的特性 既然不能使用循环 那么我们可以定义n个对象 就会调用n次构造函数 去代替循环 每次调用的时候进行加法的计算 3.代码 class Sum { public:Sum(){_sum _i;_i;}static void Init(){_i 1;_sum 0;}st…

ruoyi若依 组织架构设计--[ 菜单管理 ]

ruoyi若依 组织架构设计--[ 菜单管理 ] 1. 关于ruoyi组织架构各个表的设计2. 从产品的角度考虑 [ 菜单管理 ]2.1菜单树List页面2.2 菜单树新增2.3 菜单树修改2.4 删除菜单 1. 关于ruoyi组织架构各个表的设计 1.部门表 ancestors字段。 添加这个字段&#xff0c;方便列举所有子…

用maven安装Netty

Netty简单介绍 官网&#xff1a;https://netty.io/index.html Netty是一个异步的、事件驱动的网络应用框架&#xff0c;既可用于开发高性能的服务端&#xff0c;也可用于开发客户端。 Netty是一个NIO的客户端和服务端框架&#xff0c;用于快速、容易地开发网络应用&#xff0c…

Linux·图解Linux网络包接收过程

因为要对百万、千万、甚至是过亿的用户提供各种网络服务&#xff0c;所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发&#xff0c;要理解性能开销&#xff0c;会进行性能优化。而很多时候&#xff0c;如果你对Linux底层的理解不深的话&…

Paddle OCR 安装使用教程

简介 PaddleOCR是飞浆开源文字识别模型&#xff0c;最新开源的超轻量PP-OCRv3模型大小仅为16.2M。同时支持中英文识别&#xff1b;支持倾斜、竖排等多种方向文字识别&#xff1b;支持GPU、CPU预测&#xff0c;并且支持使用paddle开源组件训练自己的超轻量模型&#xff0c;对于…

微信小程序路由跳转,API调用,页面传值

路由跳转 wx.switchTab 跳转到 tabBar 页面&#xff0c;并关闭其他所有非 tabBar 页面。 wx.switchTab({url: /pages/tarbar/index })wx.reLaunch 关闭所有页面&#xff0c;打开到应用内的某个页面。 wx.reLaunch({url: /pages/index/index })wx.redirectTo 关闭当前页面…

13服务端实战:初始化项目

本章开始将进行服务端的实战开发&#xff0c;包含了 Devops、服务端以及其他涉及到的中间件的模块。 由于 NestJS 的文档非常完善以及之前有写过比较完整的 NestJS 的小册&#xff0c;如果对 NestJS 非常熟悉的同学可以快速跳过本章&#xff0c;另外整个实战篇的代码都会按照流…

shell命令以及运行原理、Linux权限、粘滞位

今天我带来Linux重点知识&#xff1a;shell命令以及运行原理、Linux权限、粘滞位的知识点。 目录 shell命令以及运行原理Linux权限的概念Linux下的用户su命令 Linux权限管理文件访问者的分类文件的类型和访问权限文件权限值的表达方法 Linux关于权限的知识点补充1.Linux创建用户…

Unity3d C#使用XCharts数据显示格式说明(如:数据类型、数据显示为百分比%等)

前言 XCharts是开源且比较强大的插件&#xff0c;在Unity3d中搭建UI时常常使用的数据图表的制作插件&#xff0c; 特别是当下的数字沙盘、数字孪生等项目中应用较广。笔者公司也一直在使用该插件&#xff0c;本文主要是在开发过程中的一个小需求引发的整理分享。在项目中需要将…