提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
随着目前自个业务系统的拓展,单体的服务要解决问题变得越来越臃肿,拓展性也变得很差,随之产生了服务的拆分,每个微服务只关心自己的业务,但在一个服务集群中,呈现的是整个对外的一致性。这里先以比较重要的注册中心来说。
提示:以下是本篇文章正文内容,下面案例可供参考
一、nacos是什么?
Alibaba nacos 是对比Eureka的 轻量级注册中心,操作简单,拓展性强,提供可视界面
二、使用步骤
1.项目创建
? ? ? pom.xml
<!-- 有几处需要注意的地方-->
<!-- 1,在maven 管理的项目中parent 引入 项目的主springboot 版本 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<!-- 特别注意springboot 与springcloud 版本之间的关系,如果版本不对会导致服务配置异常,坑无数-->
<properties>
<alibaba-version>2.2.6.RELEASE</alibaba-version>
<tomcat.version>9.0.33</tomcat.version>
<spring-cloud.version>Hoxton.SR10</spring-cloud.version>
</properties>
<!-- 2, -->
<dependencyManagement>
<!-- 引入alibaba nacos -->
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${alibaba-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>
</dependencies>
</dependencyManagement>
构建完上述的pom.xml 。便可以开始搭建项目
1.1 下载Nacos 服务到对应的机器?
Quick Start for Nacos Spring Cloud Projects
Spring Cloud Alibaba
Nacos 2.0.3 下载地址???????1
1.2? 下载完成之后解压出来,是个jar文件并带有一些配置
?bin 文件夹里 包含有核心的启动及停止sh
conf 是所有的配置在这里,主要配置服务的启动,数据源的配置,集群的配置等;
注意: 这里需要修改几处地方
1.1.1 application.properties?
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8848
#*************** Network Related Configurations ***************#
### If prefer hostname over ip for Nacos server addresses in cluster.conf:
# nacos.inetutils.prefer-hostname-over-ip=false
### Specify local server's IP:
# nacos.inetutils.ip-address=
# 以下是重点配置,不配置直接启动会报错
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
1.1.2 执行Sql
创建一个数据库,默认使用的库名为nacos , 并执行以下的sql 语句
nacos-mysql.sql
schema.sql
1.1.3 更新 cluster.conf.example配置文件
将文件名改成?cluster.conf
#2021-10-15T10:49:10.806
127.0.0.1:8847
这样单机版本就能启动了
1.1.4 启动 bin 目录下的 /bin/startup.sh?
sh startup.sh
/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java -Djava.ext.dirs=/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/ext -server -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/shefenfei/Documents/Server/nacos/logs/java_heapdump.hprof -XX:-UseLargePages -Dnacos.member.list= -Xloggc:/Users/shefenfei/Documents/Server/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/Users/shefenfei/Documents/Server/nacos/plugins/health,/Users/shefenfei/Documents/Server/nacos/plugins/cmdb -Dnacos.home=/Users/shefenfei/Documents/Server/nacos -jar /Users/shefenfei/Documents/Server/nacos/target/nacos-server.jar --spring.config.additional-location=file:/Users/shefenfei/Documents/Server/nacos/conf/ --logging.config=/Users/shefenfei/Documents/Server/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
nacos is starting with cluster
nacos is starting,you can check the /Users/shefenfei/Documents/Server/nacos/logs/start.out
以上如果没有问题,服务可正常启动。 在浏览器中,输入 http://localhost:8848/nacos/index.html
用户名密码默认是 nacos / nacos 启动界面如下
?
2. 构建一个服务提供者 Service-Provider?
?在 docker-spring-nacos 项目中的我们只需要加入以下两个就可以;
<dependencies>
<!-- <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-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.2 主程序中?
@SpringBootApplication
// 这个注解很重要,标识为一个向nacos注册的客户端
@EnableDiscoveryClient
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class, args);
}
}
@RestController
@RequestMapping("/nacos")
public class NacosController {
@GetMapping("/hello")
public ResponseEntity hello() {
Map<String, Object> objectMap = new HashMap<String, Object>();
objectMap.put("hello", "world");
return ResponseEntity.ok(objectMap);
}
}
?application.yml 配置
spring:
application:
name: nacos-server1
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 9998
启动 NacosApplication 应用 ,启动没有问题,在Nacos的管理界面中会有一个服出现;并以 spring.application.name 为服务名? ,这个也很重要,将来暴露给其他的调用的时候就用这个名
2.3? 创建另外一个service-consumer?
创建是跟之前一样的流程,只需要将端口及服务名修改
// 这里的名就我们注册的provider的名
@FeignClient(name = "nacos-server1")
public interface ConsumerClient {
@GetMapping("/nacos/hello")
String getResp();
}
@RestController
@RequestMapping("/feign")
public class FeignInckController {
@Autowired
private ConsumerClient consumerClient;
@GetMapping("/fetch")
public ResponseEntity feign() {
String resp = consumerClient.getResp();
return ResponseEntity.ok(resp);
}
}
postman 调用测试下
总结
在这里做一个服务注册发现就已经全部完成了,需要增加的功能可根据自己情况,加定制,后续我会再写一个关于配置中心的文章。
|