个人随笔
目录
一、springCloudAlibaba-nacos环境搭建
2023-10-24 21:42:04

从今天起简单的学习下springCloudAlibaba,也不用学太深,就是学了后几个笔记,如果不记笔记,感觉跟白学一样,心里慌慌的。

1、版本说明

springCloudAlibaba跟各种组件比如Nacos,Sentinel,Spring Boot等版本是一一对应的,这些可不能搞错了。版本对应关系可以参考https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

这里用的版本如下

  • Spring Cloud Alibaba Version 2.2.6.RELEASE
  • Spring Cloud Version Hoxton.SR9
  • Spring Boot Version 2.3.2.RELEASE
  • Sentinel Version 1.8.1
  • Nacos Version 1.4.2
  • RocketMQ Version 4.4.0
  • Dubbo Version 2.7.8
  • Seata Version 1.3.0

2、案例场景

这里开发环境用的是IDEA社区版,毕竟作为个人而言,社区版已经足够用了,没有必要去搞什么破解。

建个父工程,然后有两个子工程,其中一个是订单,一个是库存,库存起两份,都注册到nacos,来测试nacos的负载均衡。

3、建立父工程

父工程怎么建立,自己网上查。pom.xml文件如下

  1. <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">
  2. <modelVersion>4.0.0</modelVersion>
  3. <!--自己的版本管理
  4. <parent> </parent>
  5. -->
  6. <groupId>com.suibibk.springCloud</groupId>
  7. <artifactId>springCloudAlibaba</artifactId>
  8. <version>0.0.1-SNAPSHOT</version>
  9. <name>springCloudAlibaba</name>
  10. <description>Demo project for Spring Boot</description>
  11. <modules>
  12. <module>order-nacos</module>
  13. <module>stock-nacos</module>
  14. <module>stock-nacos2</module>
  15. </modules>
  16. <packaging>pom</packaging>
  17. <properties>
  18. <java.version>1.8</java.version>
  19. <spring.cloud.alibaba.version>2.2.6.RELEASE</spring.cloud.alibaba.version>
  20. <spring.cloud.version>Hoxton.SR9</spring.cloud.version>
  21. <spring.boot.version>2.3.2.RELEASE</spring.boot.version>
  22. </properties>
  23. <dependencies>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. </dependency>
  33. </dependencies>
  34. <dependencyManagement>
  35. <dependencies>
  36. <!--springcloudalibaba版本管理-->
  37. <dependency>
  38. <groupId>com.alibaba.cloud</groupId>
  39. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  40. <version>${spring.cloud.alibaba.version}</version>
  41. <type>pom</type>
  42. <scope>import</scope>
  43. </dependency>
  44. <!--springboot版本管理-->
  45. <dependency>
  46. <groupId>org.springframework.boot</groupId>
  47. <artifactId>spring-boot-starter-parent</artifactId>
  48. <version>${spring.boot.version}</version>
  49. <type>pom</type>
  50. <scope>import</scope>
  51. </dependency>
  52. <!--springcloud版本管理-->
  53. <dependency>
  54. <groupId>org.springframework.cloud</groupId>
  55. <artifactId>spring-cloud-dependencies</artifactId>
  56. <version>${spring.cloud.version}</version>
  57. <type>pom</type>
  58. <scope>import</scope>
  59. </dependency>
  60. </dependencies>
  61. </dependencyManagement>
  62. <build>
  63. <plugins>
  64. <plugin>
  65. <groupId>org.springframework.boot</groupId>
  66. <artifactId>spring-boot-maven-plugin</artifactId>
  67. </plugin>
  68. </plugins>
  69. </build>
  70. </project>

上面用dependencyManagement来管理依赖,这里管理了spring-cloud-alibaba-dependencies、spring-boot-starter-parent、spring-cloud-dependencies的依赖,反正子工程想用谁的就用谁的。

上面也包含了三个子工程

  1. <module>order-nacos</module>
  2. <module>stock-nacos</module>
  3. <module>stock-nacos2</module>

其实正常来说只需要一个stock-nacos,部署两个节点就可以了,这里是为了方便区别,所以拷贝了一份,因为都是本地,所以端口不同,但是注册到Nacos都是一样的。

4、order-nacos

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>com.suibibk.springCloud</groupId>
  6. <artifactId>springCloudAlibaba</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. </parent>
  9. <artifactId>stock-nacos</artifactId>
  10. <packaging>jar</packaging>
  11. <name>stock-nacos</name>
  12. <url>http://maven.apache.org</url>
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-web</artifactId>
  20. </dependency>
  21. <!--服务注册与发现 -->
  22. <dependency>
  23. <groupId>com.alibaba.cloud</groupId>
  24. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>junit</groupId>
  28. <artifactId>junit</artifactId>
  29. <version>3.8.1</version>
  30. <scope>test</scope>
  31. </dependency>
  32. </dependencies>
  33. </project>

OrderController.java

  1. package com.suibibk.springCloud.order.controller;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.web.bind.annotation.RequestMapping;
  4. import org.springframework.web.bind.annotation.ResponseBody;
  5. import org.springframework.web.bind.annotation.RestController;
  6. import org.springframework.web.client.RestTemplate;
  7. @RestController
  8. @RequestMapping("/order")
  9. public class OrderController {
  10. @Autowired
  11. RestTemplate restTemplate;
  12. @RequestMapping("/add")
  13. public String add(){
  14. String msg = restTemplate.getForObject("http://stock-service/stock/reduce", String.class);
  15. return "新增订单成功"+msg;
  16. }
  17. }

这里的逻辑是调用stock-service服务,借用的是RestTemplate,所以配置类需要有这个bean,这里在启动类配置
OrderApplication.java

  1. package com.suibibk.springCloud.order;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. import org.springframework.boot.web.client.RestTemplateBuilder;
  5. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  6. import org.springframework.context.annotation.Bean;
  7. import org.springframework.web.client.RestTemplate;
  8. @SpringBootApplication
  9. public class OrderApplication {
  10. public static void main( String[] args ) {
  11. SpringApplication.run(OrderApplication.class,args);
  12. }
  13. @Bean
  14. @LoadBalanced
  15. public RestTemplate restTemplate(RestTemplateBuilder builder){
  16. return builder.build();
  17. }
  18. }

application.yml配置文件

  1. server:
  2. port: 8012
  3. spring:
  4. application:
  5. name: order-service
  6. cloud:
  7. nacos:
  8. server-addr: 127.0.0.1:8848
  9. discovery:
  10. username: nacos
  11. password: nacos
  12. namespace: public

这里要配置nacos的相关信息,nacos的安装后面再说

5、stock-nacos

pom.xml

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>com.suibibk.springCloud</groupId>
  6. <artifactId>springCloudAlibaba</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. </parent>
  9. <artifactId>stock-nacos</artifactId>
  10. <packaging>jar</packaging>
  11. <name>stock-nacos</name>
  12. <url>http://maven.apache.org</url>
  13. <properties>
  14. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  15. </properties>
  16. <dependencies>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-web</artifactId>
  20. </dependency>
  21. <!--服务注册与发现 -->
  22. <dependency>
  23. <groupId>com.alibaba.cloud</groupId>
  24. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  25. </dependency>
  26. <dependency>
  27. <groupId>junit</groupId>
  28. <artifactId>junit</artifactId>
  29. <version>3.8.1</version>
  30. <scope>test</scope>
  31. </dependency>
  32. </dependencies>
  33. </project>

StockController.java

  1. package com.suibibk.springCloud.stock.controller;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. @RequestMapping("/stock")
  6. public class StockController {
  7. @RequestMapping("/reduce")
  8. public String reduce(){
  9. return "库存扣减成功";
  10. }
  11. }

启动类
StockApplication.java

  1. package com.suibibk.springCloud.stock;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. /**
  5. * Hello world!
  6. *
  7. */
  8. @SpringBootApplication
  9. public class StockApplication {
  10. public static void main( String[] args ) {
  11. SpringApplication.run(StockApplication.class,args);
  12. }
  13. }

配置文件application.yml

  1. server:
  2. port: 8013
  3. spring:
  4. application:
  5. name: stock-service
  6. cloud:
  7. nacos:
  8. server-addr: 127.0.0.1:8848
  9. discovery:
  10. username: nacos
  11. password: nacos
  12. namespace: public

服务名是stock-service

这里顺便提下,stock-nacos2跟stock-nacos的区别,本质上只需要端口不同,其他都是相同的,如果是部署在不同的服务器,那么由于ip不同,所以端口也是相同的,也就是应用本身完全相同
stock-nacos2的配置

  1. server:
  2. port: 8014
  3. spring:
  4. application:
  5. name: stock-service
  6. cloud:
  7. nacos:
  8. server-addr: 127.0.0.1:8848
  9. discovery:
  10. username: nacos
  11. password: nacos
  12. namespace: public

6、安装nacos

github
https://github.com/alibaba/nacos/releases
https://github.com/alibaba/nacos/releases/tag/1.4.2
这里版本选择的是1.4.2,然后启动也是用单机的启动即可,毕竟集群也很简单,但是集群多个节点前面需要用nginx来进行负载均衡,然后服务注册里面填写的地址就是nginx的地址

启动脚本改为单机模式

  1. set MODE="standalone"

数据库默认用内存数据库

启动成功后访问控制台
http://127.0.0.1:8848/nacos/index.html
用户密码:nacos/nacos

7、启动服务,测试

启动order-nacos、stock-nacos和stock-nacos2后,在控制台可以看到

可以看到stock-service有两个节点,然后我们访问http://127.0.0.1:8012/order/add
测试发现,轮流返回“新增订单成功库存扣减成功2”和“新增订单成功库存扣减成功”,表面负载均衡成功,默认用的是轮询。

 92

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2