手把手带你创建微服务项目

news2024/11/28 10:52:51

1.先创建以下项目结构

 2.在父项目中导入以下依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!-- Web依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 日志依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
        <!-- Lombok工具 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>
        <!-- Actuator可以帮助你监控和管理Spring Boot应用 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- SCN -->
            <!--            Spring Cloud Neflix公司出品的微服务组件的依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- 引入Jaxb开始 -->
            <dependency>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-core</artifactId>
                <version>2.2.11</version>
            </dependency>
            <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
            </dependency>
            <dependency>
                <groupId>com.sun.xml.bind</groupId>
                <artifactId>jaxb-impl</artifactId>
                <version>2.2.11</version>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>2.2.10-b140310.1920</version>
            </dependency>
            <dependency>
                <groupId>javax.activation</groupId>
                <artifactId>activation</artifactId>
                <version>1.1.1</version>
            </dependency>
            <!-- 引入Jaxb结束 -->
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

 3.分别product,page项⽬的pom.xml⽂件中引⼊ Nacos客户端依赖,必须删除这三个项-client依赖

   <dependency>
        <groupId>com.example</groupId>
        <artifactId>yx-service-common</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>

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

4。在product编写启动类


@SpringBootApplication
@MapperScan("com.qf.product.mapper")
//@EnableDiscoveryClient  //将当前的项目标记为注册中心的客户端,然后向注册信息
public class ProductApplication9000 {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication9000.class,args);
    }
}

5.在common中pom文件中添加以下依赖

  <dependencies>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!-- pojo持久化使用 -->
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>yx-service-common</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

6.在product中的application.yml中导入yml文件

server:
  port: 9000
spring:
  application:
    name: yx-service-product
  datasource:
    url: jdbc:mysql://localhost:3306/yx_sc?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 123
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #Nacos Server地址

7.在page的pom中,导入以下依赖

    <dependencies>

        <dependency>
            <groupId>com.example</groupId>
            <artifactId>spring-clound-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>


        <!-- 熔断器Hystrix -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- Nacos Client -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 引入alibaba-nacos-config依赖,可以从Nacos配置中心获得配置信息 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
     
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
    </dependencies>

8.编写page的启动类


import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
//@EnableCircuitBreaker//开启Hystri熔断器功能
@EnableFeignClients//开启Feign远程服务调用功能
@MapperScan("com.qf.product.mapper")
//申明当前项目是Eurekaa客户端
@EnableDiscoveryClient
public class PageApplication {
    public static void main(String[] args) {
            SpringApplication.run(PageApplication.class,args);
   }
//   @LoadBalanced //调用Ribbon复杂均衡算法,实现负载均衡
//   @Bean
//    public RestTemplate restTemplate(){
//        return new RestTemplate();
//    }

}

9.编写page的yml文件

server:
  port: 9100
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #Nacos Server地址
      config:
        server-addr: 127.0.0.1:8848
      #group: DEFAULT_GROUP # 如果使⽤的默认分组,可以不设置
        file-extension: yaml
        ext-config[0]:
          data-id: test1.yaml
          #group: DEFAULT_GROUP
          refresh: true # 开启扩展dataId的动态刷新
        ext-config[1]:
          data-id: test2.yaml
          #group: DEFAULT_GROUP
          refresh: true # 开启扩展dataId的动态刷新

  application:
    name: yx-service-page

  datasource:
    url: jdbc:mysql://localhost:3306/yx_sc?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: 123

hystrix:
  command:
    default:   #就算不给也不报错有默认
      circuitBreaker:
        # 强制打开熔断器,如果该属性设置为true,强制断路器进入打开状态,将会拒绝所有的请求,默认false关闭的
        forceOpen: false
        # 触发熔断错误比例阈值,默认值50%
        errorThresholdPercentage: 50
        # 熔断后休眠时长,默认值5秒
        sleepWindowInMilliseconds: 3000
        # 熔断触发最小请求次数,默认值是20
        requestVolumeThreshold: 2
      execution:
        isolation:
          thread:
            # 熔断超时设置,默认为1秒
            timeoutInMilliseconds: 2000
  threadpool: #hytix线程池配置
    default:
      coreSize: 10 # 并发执⾏的最⼤线程数,默认10
      maxQueueSize: 1000 # BlockingQueue的最⼤队列数,默认值-1
      # 即使maxQueueSize没有达到,达到queueSizeRejectionThreshold该值后,请求也会被拒绝,默认值5
      queueSizeRejectionThreshold: 800

  # 暴露健康接口的细节
  endpoint:
    health:
      show-details: always
# 针对的被调⽤⽅微服务名称,不加就是全局⽣效
yx-service-product:
  ribbon:
  # 请求连接超时时间
    ConnectTimeout: 2000
  # 请求处理超时时间
    ReadTimeout: 10000
  # 对所有操作都进⾏重试
    OkToRetryOnAllOperations: true
  # 根据如上配置,当访问到故障请求的时候,它会再尝试访问⼀次当前实例(次数由MaxAutoRetries配置),如果不⾏,
  # 就换⼀个实例进⾏访问;如果还不⾏,再换⼀次实例访问(更换次数由MaxAutoRetriesNextServer配置);如果依然不⾏,返回失败信息。
    MaxAutoRetries: 0 # 对当前选中实例重试次数,不包括第⼀次调⽤
    MaxAutoRetriesNextServer: 0 # 切换实例的重试次数
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载策略调整
# 开启Feign的熔断功能
feign:
  hystrix:
    enabled: true  # 开启Feign的熔断功能
  compression:
    request:
      enabled: true # 默认不开启
      mime-types: text/html,application/xml,application/json # 设置压缩的数据类型,设置为默认值
      min-request-size: 2048 # 设置触发压缩的大小下限,2048为默认值
    response:
      enabled: true # 默认不开启
      # ⽅式1:暴露指定refresh端⼝
        # ⽅式1:暴露指定refresh端⼝
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

10.编写page的feign接口

package com.yx.erureka.feign;

import com.qf.common.pojo.Products;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

// 注解表示Feign的远程调用
//-name:表示feign远程调用对应的服务提供者的名称\

/**
 * fallback:如果出现错误,哪哪个回退的方法从新指定
 */
@FeignClient(name = "yx-service-product",fallback = ProductFeignImp.class)
public interface ProductFeign {
    //载该接口中定义抽象方法,每一个抽象方法映射一个对应远程请求处理方法,注意要与远程处理方法的结构保持一致
@RequestMapping("/product/DD/{id}")
Products findById(@PathVariable Integer id);
@RequestMapping("/server/query_port")
 String findProductServerPort();
}

编写错误返回内容

package com.yx.erureka.feign;

import com.qf.common.pojo.Products;
import org.springframework.stereotype.Component;

@Component
public class ProductFeignImp implements ProductFeign{
    @Override
    public Products findById(Integer id) {
        return null;
    }

    @Override
    public String findProductServerPort() {
        return "-2";
    }
}

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

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

相关文章

关于Java集合框架的总结

关于Java集合框架的总结 本篇文章先从整体介绍了java集合框架包含的接口和类&#xff0c;然后总结了集合框架中的一些基本知识和关键点&#xff0c;并结合实例进行简单分析。当我们把一个对象放入集合中后&#xff0c;系统会把所有集合元素都当成Object类的实例进行处理。从JDK…

分享四款导航页 个人主页html源码

一、开源免费&#xff0c;可以展示很多社交账号&#xff0c;也可以更换社交账号图标指向你的网站&#xff0c;上传后即可使用 https://wwwf.lanzout.com/ik7R912s031g 二、开源免费&#xff0c;不过部署稍微麻烦点 https://wwwf.lanzout.com/iCq2u12s02wb 三、适合做成导航页面…

Android性能优化篇[谷歌官方]

网上看到了个和Android性能优化相关的系列文章&#xff0c;觉的还不错&#xff0c;和大家分享下。 在Android领域&#xff0c;性能永远是一块大头。市场对这类人才的需求也是有增不减&#xff0c;而且薪资待遇也不错。如果大家想深入学习Android某个领域&#xff0c; 那性能这块…

190 → 169,50天瘦20斤随感

一头猪瘦二十斤没有人会在意&#xff0c;但一个人猛地瘦二十斤或许就会有意思~ 从五月底到7月中旬&#xff0c;大致50天瘦了21斤。本文大致从我自己的感想、方法、减肥前后的心态及身体变化等方面来给予你一些关键信息&#xff0c;希望对你有用吧。 当你发现自己真的在一斤一斤…

react CSS :last-child 最后一个下边框线如何去掉

需求&#xff1a;调用分类接口后&#xff0c;tab的最后一个border不要横线。 代码如下 逻辑是 i是否等于books数组的长度-1。 books.map((book, i) > { return( <View style{borderBottom:idx ! dictype.length - 1 && "1px solid #ECEFF7"} key…

CentOS7 mariadb10.x 安装

1、添加mariabd yum源 vi /etc/yum.repos.d/mariadb.repo [mariadb] name MariaDB baseurl https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.5/centos7-amd64/ gpgkey https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck 12、建立yum…

EMC学习笔记(十六)射频PCB的EMC设计(三)

射频PCB的EMC设计&#xff08;三&#xff09; 1.布线1.1 阻抗控制2.2 转角1.3 微带线布线1.4 微带线耦合器1.5 微带线功分器1.6 微带线基本元件1.7 带状线布线1.8 射频信号走线两边包地铜皮 2.其他设计考虑 1.布线 1.1 阻抗控制 PCB信号走线的阻抗与板材的介电常数、PCB结构、…

【山河送书第二期】:《零基础学会Python编程(ChatGPT版》

【山河送书第二期】&#xff1a;《零基础学会Python编程&#xff08;ChatGPT版》 前言内容简介作者简介 前言 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&#xff0c;这得益于数据科学和人工智能领域的发展&#xff0c;使得 Python 变得异常流行&am…

电脑pdf怎么转换成word文档?你不知道的几种方法

在电脑上&#xff0c;我们经常需要查阅PDF文件&#xff0c;并且PDF文件在生活中应用广泛&#xff0c;可以保存许多重要内容。有时候我们需要将PDF文件转换为Word文档&#xff0c;以便对文件内容进行编辑。幸运的是&#xff0c;在电脑上将PDF转换为Word文档非常方便&#xff0c;…

nginx实现反向代理

Nginx Nginx (“engine x”) 是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强。Nginx可以作为静态页面的web服务器&#xff0c;同时还支持CGI协议的动态语言&#xff0c;比如perl、php等。但是不支持java。Java程序只能通过与tomcat配合…

生命在于折腾——MacOS(Inter)渗透测试环境搭建

一、前景提要 之前使用的是2022款M2芯片的MacBook Air 13寸&#xff0c;不得不说&#xff0c;是真的续航好&#xff0c;轻薄&#xff0c;刚开始我了解到M芯片的底层是ARM架构&#xff0c;我觉得可以接受&#xff0c;虚拟机用的不多&#xff0c;但在后续的使用过程中&#xff0…

《MySQL》事务

文章目录 概念事务的操作属性&#xff08;aicd&#xff09; 概念 一组DML语句&#xff0c;这组语句要一次性执行完毕&#xff0c;是一个整体 为什么要有事务&#xff1f; 为应用层提供便捷服务 事务的操作 有一stu表 # 查看事务提交方式(默认是开启的) show variables like au…

智能照明及控制系统在医院建筑中的应用

摘要&#xff1a;现阶段&#xff0c;我国的社会经济的发展水平不断提高&#xff0c;为智能照明系统的发展带来了新的契机。文章主要介绍了几类智能照明系统&#xff0c;分析了其优点&#xff0c;并介绍了智能照明系统在医院建筑中的具体应用&#xff0c;具有一定的参考价值。 …

数据结构顺序表,实现增删改查

一、顺序表结构体定义 #define MAXSIZE 8 //定义常量MAXSIZE&#xff0c;表示数据元素的最大个数为8 typedef int datatype; //重定义int类型&#xff0c;分别后期修改顺序表中存储的数据类型 typedef struct {int len; //顺序表长度datatype data[MAXSIZE…

微服务架构介绍 - SpringCloud Alibaba

1. 单体架构vs微服务架构 1.1 单机架构 1.1.1 什么是单体架构 一个归档包&#xff08;例如war格式&#xff09;包含了应用所有功能的应用程序&#xff0c;我们通常称之为单体应用。架构单体应用的方法论&#xff0c;我们称之为单体应用架构。&#xff08;就是一个war包打天下&a…

Service:微服务架构的应对之道

Service 的工作原理和 LVS、Nginx 差不多&#xff0c;Kubernetes 会给它分配一个静态 IP 地址&#xff0c;然后它再去自动管理、维护后面动态变化的 Pod 集合&#xff0c;当客户端访问 Service&#xff0c;它就根据某种策略&#xff0c;把流量转发给后面的某个 Pod。 Service 使…

小程序form表单验证,validate 在更新数据以后不能验证?还是提示同样的错误

报错&#xff1a; 一直报手机号码必须填写&#xff0c;但是我已经填写了。 解决&#xff1a; 花了2个小时&#xff0c;最后发布是模式models写错了。 改完之后&#xff0c;终于提示别的错误了&#xff1a; 源码&#xff1a; //wxml <view class"welcome">欢…

一款挖掘xss漏洞的工具

xsshelp 闲着没事随便写的一个辅助挖掘xss漏洞的工具&#xff08;主要手懒为了省事&#xff0c;就把每回挖xss的一个比较好用的思路简单给用工具实现了下&#xff09; xsshelp version: 1.0.0Usage: [-ut] [-u url] [-t thread] [-h help]Options: -h this help -t intth…

一文搞清楚专利申请全部流程

专利检索网站&#xff1a;https://pss-system.cponline.cnipa.gov.cn/conventionalSearch 一、专利的相关概念 专利包含三种含义&#xff1a;1.专利权2.受到专利保护的发明创造3.专利文献 专利的类别&#xff1a;1.发明2.实用新型3.外观设计&#xff08;具体含义自行上网查询…

电脑提示缺少msvcp120.dll怎么办?分享几个靠谱的解决方法

msvcp120.dll是Microsoft的一个动态链接库文件。它是许多应用程序和游戏所依赖的一个重要文件&#xff0c;它包含了一些用于C程序开发的函数和组件。当你在运行某个程序时&#xff0c;如果系统找不到msvcp120.dll文件&#xff0c;就会出现错误提示&#xff0c;例如“找不到msvc…