整合篇
序言
在之前我有写过一篇Nacos入门的案例,在这篇关于介绍以及安装Nacos的方法我就不在描述了,直接从0开始怎么去搭建以及实现,下面是Nacos入门的跳转路径如果没安装的可参考入门篇。
《Nacos入门篇跳转入口》
Spring Alibaba Cloud
这里的意思是就是说SpringCloud Alibaba提供了分布式应用开发的一站式解决方案,包含了分布式应用开发所需的所有组件,可以轻松使用Spring Cloud开发应用。使用Spring Cloud Alibaba,只需添加一些注解和少量配置,就可以将Spring Cloud应用连接到阿里巴巴的分布式解决方案,并利用阿里巴巴的中间件构建分布式应用系统。SpringCloud 相关组件有很多,如Sentinel、Nacos、RocketMQ等,这里主要讲Nacos
项目搭建
SpringBoot多模块项目
在首先创建项目时把Type中的选项为Maven POM,这样就不会生成一整个Maven项目了,也就减省了那些删除无关紧要包的操作,记得jdk中选择8,我下面图中的11会出一个SDK不支持的错误
创建项目后我这边提出一个小需求,我需要在用户消费之后我这边实现库中数据减少并记录下来,所以得出两个层次。消费层与库存层,接下来我们在刚刚创建的项目中创建两个个子项目,具体项目结构如下
这里子项目是使用Maven创建,所以还得配置一些东西吧,那就一个一个来,首先把消费层次搞定,我这边也就放入消费层的示例代码了哈,库存层的与消费层的方法是一样的,做之前确立步骤
- 配置pom文件
<!--web配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.12.RELEASE</version>
</dependency>
- 配置SpringBoot启动类
package com.uncletj.consume;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Date 2021/7/21 11:24
* @Version SpringBoot 2.2.2
* @packageName 消费层启动类
* @Name 藤井大叔
*/
@SpringBootApplication
public class ConsumeApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumeApplication.class,args);
}
}
- 配置yml
server:
port: 8081
- 编写代码
package com.uncletj.consume.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Date 2021/7/21 11:23
* @Version SpringBoot 2.2.2
* @packageName 消费者控制层
*/
@RestController
@RequestMapping("/consume")
public class ConsumeController {
@RequestMapping("/add")
public String add(){
return "下单成功";
}
}
这里先基本配置一下,目前还是SpringBoot状态,先走着项目看看,启动两个启动类。库存层我在这就不做多的描述了哈,因为代码是一样的,下面是两个启动执行后的效果
消费层
库存层
启动执行无问题,那么就开始SpringCloud Alibaba相关配置吧。首先我们看一下启动类控制台
在选择启动类的这个里面进去选择templates选择SpringBoot即可像下面一样,相对于上面这种的是不是就方便一些了吧
配置SpringCloud Alibaba
在父层pom中添加相关依赖,具体如下
#这里是如下的版本号,切记一定要一这种方式
<properties>
<spring-cloud-alibaba-version>2.2.5.RELEASE</spring-cloud-alibaba-version>
<spring-cloud-version>Hoxton.SR8</spring-cloud-version>
<spring-boot-version>2.3.12.RELEASE</spring-boot-version>
</properties>
<dependencyManagement>
<dependencies>
<!--Spring Cloud Alibaba 版本管理器-->
<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>
<!--SpringBoot 版本管理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring-boot-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringCloud 版本管理器-->
<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>
RestTemplate
RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端库,下面我们将使用他来访问库存层的api,具体实现如下
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
RestTemplate restTemplate = builder.build();
return restTemplate;
}
//、、、
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/add")
public String add(){
String msg = restTemplate.getForObject("http://localhost:8082/repertory/count",String.class);
//、、、、、
}
查询使用后运行结果
控制台执行输出
配置Nacos
引入Nacos依赖后,跳转到我上篇的人可以发现Nacos有一个工具需要下载,这里我也不过多描述如何下载,大家可直接去我那篇去查看,下面是引入相关依赖,在子模块都引入即可
<!--nacos注册服务中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
引入完之后我们访问Nacos界面查看好像并没有服务信息,但是我们项目是启动了呀,为什么呢,因为需要去yml文件配置nacos
具体配置nacos的样式如下
spring:
cloud:
nacos:
server-addr: 127.0.0.1:8848
discovery:
namespace: public
username: nacos
password: nacos
application:
name: consume-service
这样我们每个项目的服务设置就都在这里看到了,我接下来讲一讲具体的参数设置
下面我在出一个需求,我可能说我这个东西很抢手是吧,我开启一个进程可能满足不了客户需求,我这边开启多个进程试试,具体实现如下
@Value("${server.port}")
String port;
获取到端口值之后我们在试试看,嗯哼竟然只能获取一个的,原来是我们在消费层定死了8082端口号,这个时候应该把这个换成库存层的名称即可,下面我们再来看看
报错500的原因是我们需在刚刚获取rest服务下添加一个注解,如下,这个注解以及上面的报错原因是因为我们之前的单体项目是吧直接访问的是某个接口,但是我们现在一个项目中有多个端口号,这个注解会开启负载均衡,其原理是使用了这个注解以后 ,会在 restTemplate 里面 通过 restTemplate.setInterceptors 放入 LoadBalancerInterceptor ,这个过滤器会在 请求远程成接口的时候 动态判断请求的域是不是 负载 负载均衡支付的服务的地址,如果是,那么就会代理 使用 这个负载均衡器 来调用
@LoadBalanced
下面看效果如下面这几张图
每次调用的端口号都是不同的,这样也就达到了我上面的需求了
Nacos工具说明
服务命名空间创建
这个是命名空间,也就是在我们刚才在配置的spring-cloud-nacos-disovery-namespace:public即是选择这个。比如我后面添加的命名空间也是可存放服务的
在这个里面即可创建更多的命名空间
权限设置
这个使用于开发者的权限以及设置每位使用者的权限
若要前行,就要离开你现在停留的地方!