目前适用于Spring Cloud服务注册中心的解决方案比较多,诸如:Consul
、Spring Cloud Eureka
、Zookeeper
、Etcd
等,配置中心有:Spring Cloud Config
、Apollo
、Disconf
等。总感觉这些搭建起来较为繁琐,所以考虑使用Nacos
来做配置和服务注册中心。
简介
Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo的注册中心有多种:Multicast、zookeeper、Nacos、Redis、Simple,官方推荐使用Zookeeper
作为注册中心,不过在我之前搭建大数据的时候,总感觉Zookeeper
太重了,觉得Nacos才是我想要的。
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它具有:动态配置服务、服务发现及管理、动态DNS服务等功能。
这里我用到的环境为:
- Dubbo 2.7.5
- Nacos 1.1.4
- MariaDB 10.3.10
- Windows 10
- IntelliJ IDEA 2019.3.1
- 64 bit JDK 1.8.0_231
- Spring Boot 2.2.3.RELEASE
部署Nacos开发环境
数据库安装在这里就不展开细说,大家自行探索。首先需要去https://github.com/alibaba/nacos/releases下载Nacos,解压之后目录结构如下:
1 | │ LICENSE |
- 先初始化
Nacos
数据库,这里我创建了一个名为nacos-config
的数据库并导入nacos-mysql.sql
的数据库脚本. - 修改conf/application.properties文件,添加mysql数据源的url、用户名和密码。我们进入到bin目录,双击startup.cmd文件启动
1
2
3
4db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=rootNacos
服务:由于只是开发环境,所以就先搭建这个1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34,--.
,--.'|
,--,: : | Nacos 1.1.4
,`--.'`| ' : ,---. Running in stand alone mode, All function modules
| : : | | ' ,'\ .--.--. Port: 8848
: | \ | : ,--.--. ,---. / / | / / ' Pid: 24724
| : ' '; | / \ / \. ; ,. :| : /`./ Console: http://192.168.3.27:8848/nacos/index.html
' ' ;. ;.--. .-. | / / '' | |: :| : ;_
| | | \ | \__\/: . .. ' / ' | .; : \ \ `. https://nacos.io
' : | ; .' ," .--.; |' ; :__| : | `----. \
| | '`--' / / ,. |' | '.'|\ \ / / /`--' /
' : | ; : .' \ : : `----' '--'. /
; |.' | , .-./\ \ / `--'---'
'---' `--`---' `----'
此处省略xxx行
2020-01-18 11:17:19,063 INFO Exposing 2 endpoint(s) beneath base path '/actuator'
2020-01-18 11:17:19,104 INFO Initializing ExecutorService 'taskScheduler'
2020-01-18 11:17:19,297 INFO Tomcat started on port(s): 8848 (http) with context path '/nacos'
2020-01-18 11:17:19,304 INFO Nacos Log files: E:\tool\nacos-server-1.1.4\nacos/logs/
2020-01-18 11:17:19,304 INFO Nacos Conf files: E:\tool\nacos-server-1.1.4\nacos/conf/
2020-01-18 11:17:19,305 INFO Nacos Data files: E:\tool\nacos-server-1.1.4\nacos/data/
2020-01-18 11:17:19,306 INFO Nacos started successfully in stand alone mode.
2020-01-18 11:17:19,812 INFO Initializing Servlet 'dispatcherServlet'
2020-01-18 11:17:19,823 INFO Completed initialization in 11 ms单机模式
版本,现在我们访问Nacos服务:http://192.168.3.27:8848/nacos/index.html
默认用户名和密码为:nacos/nacos
IDEA创建多模块项目
新建一个Maven项目
步骤:Create New Project->选择Maven点击Next->输入项目名称、选择目录存放地址等,点击Finish,创建完成后,我们需要删除src目录并且在pom
添加<packaging>pom</packaging>
,如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
创建Provider模块
在项目上点击右键,New->Module输入项目信息,点击Next->Finish
创建Consumer模块
在项目上点击右键,New->Module输入项目信息,点击Next->Finish
引入相关jar包
1 | <properties> |
Dubbo&Nacos注册中心
我们首先在Provider创建一个服务并注册到nacos
中.
- 配置
application
:1
2
3
4
5
6
7
8
9
10
11
12
13spring.application.name=dubbo-nacos-provider
# Base packages to scan Dubbo Component: @org.apache.dubbo.config.annotation.Service
dubbo.scan.base-packages=com.nacos.provider.service
# Dubbo Protocol
dubbo.protocol.name=dubbo
## Random port
dubbo.protocol.port=8888
## Dubbo Registry
nacos.server-address = 127.0.0.1
nacos.port = 8848
dubbo.registry.address=nacos://${nacos.server-address}:${nacos.port} - 创建一个
DemoService
接口1
2
3
4
5public interface DemoService {
String sayHello(String name);
} - 创建实现类并引入dubbo提供的
@Service
注解:把我们的1
2
3
4
5
6
7
8
9
10@Service(version = "1.0.0")
public class DemoServiceImpl implements DemoService {
@Value("${dubbo.application.name}")
private String serviceName;
public String sayHello(String name) {
return String.format("[%s] : Hello, %s", serviceName, name);
}
}Provider
运行起来(请勿关闭,供下面consumer程序调用),可以看到服务已经注册到Nacos
中
现在我们来实现对服务的消费.首先当然还是我们的application
的配置:
1 |
|
新建了一个Controller
:
1 | @RequestMapping("/demo") |
并引入Provier用到的接口DemoService。
启动起来,调用接口:
Nacos作为配置中心
如果要使用Nacos
作为我们的配置中心的话,这里还需要引入一个包:
1 | <!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-boot-starter --> |
并在配置文件中加入nacos.config.server-addr
的配置:
1 | nacos.config.server-addr=127.0.0.1:8848 # 根据实际部署情况修改 |
然后,我们进入到Nacos控制台,新建一个配置名为dubbo-nacos-config,如下:
配置的相关说明,
1 | Data ID:com.alibaba.nacos.example.properties |
在Spring Boot启动类加上@NacosPropertySource(dataId = "dubbo-nacos-config", autoRefreshed = true)
,autoRefreshed表示自动刷新
这里我们在需要用到配置的类中加入如下代码:
1 | @NacosValue(value = "${service.name:default}", autoRefreshed = true) |
@NacosValue
和@Value
的用法差不多。然后在controller添加了一个方法:
1 | @GetMapping("version") |
启动程序,访问http://localhost:8080/demo/version
,可以看到我们获取到了nacos中的配置数据:
我在nacos中修改配置文件的值:
1 | service.name=demo |
直接刷新页面可以发现我们的值自动改变了,
[参考]
https://github.com/apache/dubbo-spring-boot-project/tree/master/dubbo-spring-boot-samples
https://nacos.io/en-us/docs/quick-start-spring-boot.html
http://dubbo.apache.org/en-us/docs/user/quick-start.html
有问题一定要多看官方文档和Github