首页 > 其他分享 >springcloud教程 -- 快速搭建入门级demo

springcloud教程 -- 快速搭建入门级demo

时间:2023-11-14 16:15:21浏览次数:32  
标签:-- springcloud boot springframework eureka spring demo org cloud

废话不多讲,跟紧我,开启你的SpringCloud初体验   首先回顾微服务的基本组成:   [图片 here]   生产者:提供服务 消费者:消费服务 服务注册/发现中心:服务注册,发现,监控 所以,首先明白springcloud微服务的架构基础 :生产者(client),消费者(client),服务注册/发现中心(server)   *************************************************************************************************************************   预先说明!!springboot与SpringCloud及SpringCloud的相关组件有版本兼容问题,以下代码中选择的版本都是经过实际测试,请勿随意修改版本,否则会出现未知问题!   **************************************************************************************************************************   先看demo结构:基础组件学习共需要创建7个小spring-boot项目,本章节先创建其中4个基础项目,其余组件的学习后续加入进来即可, JDK统一选择1.8     首先创建父工程 j-cloud 创建简单的名为j-cloud的springboot工程,打包方式为pom,pom.xml如下:   <?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>cn.jorian.framework</groupId>   <artifactId>j-cloud</artifactId>   <version>1.0.0</version>   <packaging>pom</packaging>     <name>j-cloud</name>   <!-- FIXME change it to the project's website -->   <url>http://www.example.com</url>     <properties>     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>     <java.version>1.8</java.version>   </properties>     <dependencies>     <dependency>       <groupId>junit</groupId>       <artifactId>junit</artifactId>       <version>4.11</version>       <scope>test</scope>     </dependency>     <!-- Swagger API文档 -->     <dependency>       <groupId>io.springfox</groupId>       <artifactId>springfox-swagger2</artifactId>       <version>2.9.2</version>     </dependency>     <dependency>       <groupId>io.springfox</groupId>       <artifactId>springfox-swagger-ui</artifactId>       <version>2.9.2</version>     </dependency>     <dependency>       <groupId>com.github.xiaoymin</groupId>       <artifactId>swagger-bootstrap-ui</artifactId>       <version>1.9.3</version>     </dependency>     <dependency>       <groupId>io.springfox</groupId>       <artifactId>springfox-bean-validators</artifactId>       <version>2.9.2</version>     </dependency>   </dependencies>   <modules>       </modules>     </project> 一,创建服务注册发现中心工程:j-cloud-server-eureka 1.在父工程j-cloud右击创建一个module: j-cloud-server-eureka     2.填写相关信息     3.新创建的模块结构如下:     4.模块j-cloud-server-eureka的pom.xml如下:   <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.2.4.RELEASE</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>cn.jorian.framework</groupId>     <artifactId>j-cloud-server-eureka</artifactId>     <version>1.0.0</version>     <name>j-cloud-server-eureka</name>     <description>Demo project for Spring Boot</description>       <properties>         <java.version>1.8</java.version>         <spring-cloud.version>Hoxton.SR1</spring-cloud.version>     </properties>       <dependencies>         <!--eureka-server-->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>         </dependency>         <!--LOMBOK-->         <dependency>             <groupId>org.projectlombok</groupId>             <artifactId>lombok</artifactId>             <version>1.16.20</version>             <scope>provided</scope>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>             <exclusions>                 <exclusion>                     <groupId>org.junit.vintage</groupId>                     <artifactId>junit-vintage-engine</artifactId>                 </exclusion>             </exclusions>         </dependency>     </dependencies>       <dependencyManagement>         <dependencies>             <dependency>                 <groupId>org.springframework.cloud</groupId>                 <artifactId>spring-cloud-dependencies</artifactId>                 <version>${spring-cloud.version}</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>         </dependencies>     </dependencyManagement>       <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build>   </project> 5.模块j-cloud-server-eureka的application.yml如下   spring:   security:     basic:       enabled: true     user:       name: jorian       password: 123456 server:   port: 8761   eureka:   client:     register-with-eureka: false     fetch-registry: false     service-url:       defaultZone: http://jorian:123456@localhost:8761/eureka   注意 :yml格式的文件有特殊要求,必须树形结构,不能有tab,具体请百度    6.模块j-cloud-server-eureka的启动类需加上注解@EnableEurekaServer, 来声明其是一个基于Eureka的服务注册发现中心   package cn.jorian.framework.jcloudservereureka;   import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;   @SpringBootApplication @EnableEurekaServer //标明是一个server public class JCloudServerEurekaApplication {       public static void main(String[] args) {         SpringApplication.run(JCloudServerEurekaApplication.class, args);           System.out.println("---服务监控访问地址"+"http://localhost:8761");     }   } 7.启动j-cloud-server-eureka服务:   执行main方法启动springboot工程     8.在浏览器访问:http://localhost:8761,查看eureka服务注册发现中心是否启动   启动成功界面如下:     二,创建生产者模块:j-cloud-provider1 1.同上,在父工程j-cloud右击创建一个module: j-cloud-provider1   2.填写相关信息,打包方式为jar   3.整个工程结构如下:     4.生产者模块j-cloud-provider1的pom.xml如下   <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.2.4.RELEASE</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>cn.jorian.framework</groupId>     <artifactId>j-cloud-provider1</artifactId>     <version>1.0.0</version>     <name>j-cloud-provider1</name>     <description>Demo project for Spring Boot</description>       <properties>         <java.version>1.8</java.version>         <spring-cloud.version>Hoxton.SR1</spring-cloud.version>     </properties>       <dependencies>         <!--eureka-client 依赖-->         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>         </dependency>         <!--LOMBOK-->         <dependency>             <groupId>org.projectlombok</groupId>             <artifactId>lombok</artifactId>             <version>1.16.20</version>             <scope>provided</scope>         </dependency>         <!--单元测试依赖-->         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>             <exclusions>                 <exclusion>                     <groupId>org.junit.vintage</groupId>                     <artifactId>junit-vintage-engine</artifactId>                 </exclusion>             </exclusions>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>             <version>2.2.4.RELEASE</version>             <scope>compile</scope>         </dependency>     </dependencies>       <dependencyManagement>         <dependencies>             <dependency>                 <groupId>org.springframework.cloud</groupId>                 <artifactId>spring-cloud-dependencies</artifactId>                 <version>${spring-cloud.version}</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>         </dependencies>     </dependencyManagement>       <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build>   </project> 5.生产者模块j-cloud-provider1的application.yml如下, 此处注意配置文件中声明了服务注册中心的地址   # 应用端口 server:   port: 7901 spring:   application:     # 应用名称     name: provider-user   # eureka 配置 eureka:   client:     serviceUrl:       defaultZone: http://jorian:123456@localhost:8761/eureka   logging:   level:     root: INFO   6.生产者模块j-cloud-provider1的启动类如下,添加注解:@EnableEurekaClient来声明其是一个client(生产者或者消费者,在这里他是生产者)   package cn.jorian.framework;   import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;   /**  * @author jorian  */ @SpringBootApplication @EnableEurekaClient //表明这是一个eureka客户端 public class JCloudProvider1Application {       public static void main(String[] args) {         SpringApplication.run(JCloudProvider1Application.class, args);     }   }   7.创建UserController.java,用来提供测试用的API   UserController.java代码   package cn.jorian.framework.controller;   import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;   @RestController @RequestMapping("/user") public class UserController { @RequestMapping("/sayHello") public String sayhello(){ return "I`m provider 1 ,Hello consumer!"; } @RequestMapping("/sayHi") public String sayHi(){ return "I`m provider 1 ,Hello consumer!"; } @RequestMapping("/sayHaha") public String sayHaha(){ return "I`m provider 1 ,Hello consumer!"; } }   8.执行main方法,启动生产者模块: j-cloud-provider1   9.在浏览器访问或者刷新:http://localhost:8761,在eureka服务注册发现中心查看生产者服务是否已被发现注册   注册成功如下:可以看到应用名称,访问地址,也可以自行测试接口的返回结果     三,创建消费者:j-cloud-sonsumer 1.同上,在父工程j-cloud右击创建一个module:j-cloud-sonsumer   2.填写相关信息,打包方式为jar   3.整个消费者模块:j-cloud-sonsumer工程结构如下:     4.消费者模块:j-cloud-sonsumer的pom.xml如下   <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.2.4.RELEASE</version>         <relativePath/> <!-- lookup parent from repository -->     </parent>     <groupId>cn.jorian.framework</groupId>     <artifactId>j-cloud-consumer</artifactId>     <version>1.0.0</version>     <name>j-cloud-consumer</name>     <description>Demo project for Spring Boot</description>       <properties>         <java.version>1.8</java.version>         <spring-cloud.version>Hoxton.SR1</spring-cloud.version>     </properties>       <dependencies>         <dependency>             <groupId>org.springframework.cloud</groupId>             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>         </dependency>         <!--LOMBOK-->         <dependency>             <groupId>org.projectlombok</groupId>             <artifactId>lombok</artifactId>             <version>1.16.20</version>             <scope>provided</scope>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>             <exclusions>                 <exclusion>                     <groupId>org.junit.vintage</groupId>                     <artifactId>junit-vintage-engine</artifactId>                 </exclusion>             </exclusions>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>             <version>2.2.4.RELEASE</version>             <scope>compile</scope>         </dependency>     </dependencies>       <dependencyManagement>         <dependencies>             <dependency>                 <groupId>org.springframework.cloud</groupId>                 <artifactId>spring-cloud-dependencies</artifactId>                 <version>${spring-cloud.version}</version>                 <type>pom</type>                 <scope>import</scope>             </dependency>         </dependencies>     </dependencyManagement>       <build>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build>   </project>   5. 消费者模块:j-cloud-sonsumer的application.yml如下   server:   port: 8001 spring:   application:     name: j-cloud-consumer   # eureka 配置 eureka:   client:     serviceUrl:       defaultZone: http://jorian:123456@localhost:8761/eureka logging:   level:     root: INFO 6.消费者模块:j-cloud-sonsumer的启动类如下,添加注解:@EnableEurekaClient来声明其是一个client(生产者或者消费者,在这里他是消费者)   package cn.jorian.framework;   import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient;   @SpringBootApplication @EnableEurekaClient public class JCloudConsumerApplication {       public static void main(String[] args) {         SpringApplication.run(JCloudConsumerApplication.class, args);     }   } 7.创建HelloController对外提供访问API   HelloController代码如下:   package cn.jorian.framework.controller;   import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;   /**  *  * @author jorian  *  */ @RestController public class HelloController {   @Bean @LoadBalanced public RestTemplate getResttemplate(){ return new RestTemplate(); } @Autowired private RestTemplate resttemplate;   @RequestMapping("/hello") public String hello(){ //指出服务地址   http://{服务提供者应用名名称}/{具体的controller} String url="http://provider-user/user/sayHello";   //返回值类型和我们的业务返回值一致 return resttemplate.getForObject(url, String.class);   } @RequestMapping("/hi") public String hi(){ //指出服务地址   http://{服务提供者应用名名称}/{具体的controller} String url="http://provider-user/user/sayHi";   //返回值类型和我们的业务返回值一致 return resttemplate.getForObject(url, String.class);   } @RequestMapping("/haha") public String haha(){ //指出服务地址   http://{服务提供者应用名名称}/{具体的controller} String url="http://provider-user/user/sayHaha"; //返回值类型和我们的业务返回值一致 return resttemplate.getForObject(url, String.class);   } }   7.执行j-cloud-sonsumer的main方法,启动消费者工程   8.在浏览器访问或者刷新:http://localhost:8761,在eureka服务注册发现中心查看消费者服务是否已被发现注册   注册成功如下,可以看到应用名称,访问地址     四,测试 1.在地址栏直接访问消费者地址,http://localhost:8001/hello,成功调用到 j-cloud-provider1提供的接口并返回结果!     2.**升级难度**尝试开启多个provider实例,用来测试负载均衡**** 可以采用修改yml文件 中的端口号重复启动实例,也可以另外新建多个provider(我们采用这种方式),修改其中的yml文件中的端口号,然后启动。   由于eureka配置了ribbon负载均衡策略,消费者的请求会在客户端被决定好发送到哪台服务提供者进行处理。   创建与启动过程不再赘述,参考j-cloud-provider1创建启动过程   注意:   1、创建与j-cloud-provider1所有内容一致的j-cloud-provider2 2、只修改第二个生产者j-cloud-provider2 的 application.yml 中的端口号为7902即可 3、注意不要修改application.yml 中的应用名称, 两个生产者要用同样的名称,代表同一个应用的两个实列 4、然后启动工程 第二个生产者模块: j-cloud-provider2项目结构如下:     3.启动成功后在注册中心查看服务注册情况,2个provider都已经上线     4.地址栏重复访问消费者地址N次,http://localhost:8001/hello,会发现返回结果在两个provider切换,实现了负载均衡   第n次:     第n+1次:     至此,基础demo搭建完成  

标签:--,springcloud,boot,springframework,eureka,spring,demo,org,cloud
From: https://www.cnblogs.com/kn-zheng/p/17831851.html

相关文章

  • Halcon、HDevelop快速入门
    ​HDevelop基础一HDevelop概述    HDevelop是一款机器视觉的集成开发环境。下面将对HDevelop的界面内容做一下简单的介绍。界面介绍打开HDevelop,将看到以下画面。     如上图所示,打开HDevelop后可以看到4个窗口:图形窗口,算子窗口,变量窗口,程序窗口。其中......
  • 如何利用Git进行团队协作?
    在现代软件开发中,版本控制已经成为了不可或缺的工具。Git是一种非常流行的分布式版本控制系统,它可以帮助团队协作开发,保证代码的安全性和可维护性。在本文中,我们将探讨如何利用Git进行团队协作。一、Git基础知识Git基础知识是进行团队协作的必要前提。在这里,我们简单介绍几个基......
  • Ubuntu——初始化服务器切换到root用户
    前言最近切换了工作本从windows切换到了mac,搭建虚拟机的时候发现centos的镜像直接使用会存在问题,只好使用ubuntu,之前还是上学的时候偶尔使用下;内容重置密码然后切换用户#sudopasswdroot#suroot......
  • Getting Started with Pktgen
    Thissectioncontainsinstructionsonhowtogetupandrunningwith DPDK andthe pktgen trafficgeneratorapplication.本节包含有关如何启动和运行DPDK和pktgen流量生成器应用程序的说明。TheseinstructionsrelatetosettingupDPDKand pktgen onanUb......
  • python datetime对象转成字符串类型str
    ptrada=dbutil.select(f"selecttrade_datefrom...")print(type(ptrada),ptrada)    # <class'list'>[(datetime.datetime(2023,8,1,0,0),)]一般从数据库中取到的日期都是datetime对象数据结构pretra=ptrada[0][0]    print(type(pretra ),pr......
  • TS4000软磁直流测试系统全自动测量软件
    软磁直流测试系统全自动测量软件l 软件能够运行于Windows系统下作界面全中文提示,操作直观简捷。l 全自动控制与计算,智能化判断,最大限度消除人工操作所带来的误差。l 自动测量:Bm、Br、Hc、μi、μm 等静态磁特性参数;并绘制磁滞回线、基本磁化曲线、μ-H磁导率曲线等l 软......
  • Ansible剧本添加静态路由
    Roles目录结构Vars文件(roles/manage_routes/vars/main.yml)点击查看代码routes:-network:"192.168.1.0"netmask:"255.255.255.0"gateway:"192.168.1.1"-network:"10.0.0.0"netmask:"255.255.0.0"......
  • 使用 kubeadm 进行证书管理
    检查证书是否过期kubeadmcertscheck-expiration[check-expiration]Readingconfigurationfromthecluster...[check-expiration]FYI:Youcanlookatthisconfigfilewith'kubectl-nkube-systemgetcmkubeadm-config-oyaml'CERTIFICATE......
  • 图解ASP.NET MVC项目运行
    原文链接:https://jingyan.baidu.com/article/90bc8fc8ac2e52f653640c33.html吾终日所思也,不如须臾之所学也,刚开始看mvc架构,与以前的winform完全不一样,一头雾水,看完此内容豁然开朗。1、Global.asax—应用程序启动注册路由当对网站发出请求时,应用程序是如何把请求引到对应的控制......
  • IP地址库
    一、简介    由于iptaobao关闭,需要切换IP地址库,现在使用:Ip2region开源项目二、说明    目前最新已更新到了v2.0版本,ip2regionv2.0是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率,准提供了众多主流编程语言的xdb数据生成和查询客......