启动Nacos
官网:https://nacos.io/zh-cn/
下载地址:https://github.com/alibaba/nacos/releases
解压后使用以下命令启动:
sh nacos/bin/startup.sh -m standalone
其中standalone
表示以单机模式运行,具体可以参考文档。
启动后访问127.0.0.1:8848
,默认用户名和密码都是nacos,登录后就可以看到Nacos控制台了。
创建服务提供者
有了注册中心,我们现在就可以创建服务提供者了。
由于我们使用Dubbo
作为RPC框架,服务风格也是对内RPC对外RESTful,所以在这里直接整合Dubbo
。
创建一个新的module
,名为wendev-provider
。
创建pom.xml
:
wendev-microservice
site.wendev.microservice
0.0.1-SNAPSHOT
4.0.0
wendev-provider
site.wendev.microservice
wendev-api
${project.version}
junit
junit
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-data-jpa
2.2.1.RELEASE
org.springframework.cloud
spring-cloud-starter-zipkin
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-netflix-ribbon
io.netty
netty-all
org.apache.dubbo
dubbo
org.apache.dubbo
dubbo-spring-boot-starter
org.apache.dubbo
dubbo-registry-nacos
com.alibaba.spring
spring-context-support
其中引入了我们上一篇文章中所讲的公共API模块。
公共API的编写
在wendev-api
模块中创建一个包site.wendev.microservice.api
,新建一个interface
:
HelloService.java
package site.wendev.microservice.api;
public interface HelloService {
String hello(String message);
}
这个就是我们的服务的公共API:根据用户输入的message返回一个字符串。
执行mvn install
将这个模块安装在本地,以供其他服务调用。
服务提供者的实现
在wendev-provider
项目下新建资源文件application.yml
:
server:
port: 8700
spring:
application:
name: wendev-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
datasource:
username: username
password: password
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/wendev?serverTimezone=UTC&characterEncoding=utf-8
zipkin:
base-url: http://127.0.0.1:9411
main:
allow-bean-definition-overriding: true
# 单点检查
management:
endpoints:
web:
exposure:
include: "*"
dubbo:
registry:
address: nacos://127.0.0.1:8848
scan:
base-packages: site.wendev.microservice.provider.service
protocol:
name: dubbo
port: -1
部分节点含义解释:
-
server.port
:服务运行的端口 -
spring.application.name
:服务名称,也就是服务在注册中心的名称,非常重要 -
spring.cloud.nacos.discovery.server-addr
:服务注册与发现中心(Nacos)的地址 -
spring.zipkin.base-url
:服务链路追踪(ZipKin)的地址。ZipKin的使用会在后续文章中讲解 -
spring.main.allow-bean-definition-overriding
:允许注解相同。不加会报错 -
dubbo.registry.address
:Nacos的地址 -
dubbo.scan.base-packages
:Dubbo注解扫描,在这里声明的包中含有@Service
注解的就会被扫描到 -
dubbo.protocol.name
:声明使用Dubbo协议 -
dubbo.protocol.port
:-1表示自增端口
在wendev-provider
下新建包site.wendev.microservice.provider.service
,创建一个Java文件,实现我们刚刚写的接口:
HelloServiceImpl.java
@Service
public class HelloServiceImpl implements HelloService {
@Value("${server.port}")
private String port;
@Override
public String hello(String message) {
return String.format("Welcome to WenDev, your message is %s, from the port %s. From Dubbo.",
message, port);
}
}
注意!这里这个@Service
注解不是Spring的,而是org.apache.dubbo.config.annotation.Service
。不要弄错了。
创建一个文件用来启动应用:
ServiceProviderApplication.java
@EnableDiscoveryClient
@SpringBootApplication
public class ServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceProviderApplication.class, args);
}
}
@EnableDiscoveryClient
表示开启服务注册与发现,这个与使用Eureka时是一样的。
启动项目,在Nacos中就可以发现服务的注册信息了:
因为我们整合了Dubbo,所以第一条注册信息是Dubbo产生的。
同时在启动时,也可以发现控制台中输出了如下信息:
2019-12-15 14:55:29.824 INFO [wendev-provider,,,] 7430 --- [ main] o.s.c.a.n.registry.NacosServiceRegistry : nacos registry, wendev-provider 10.13.111.47:8700 register finished
表明服务已经成功注册到Nacos中。
如果查看一下控制台输出的信息,也可以看到Dubbo初始化、扫描到我们刚刚写的@Service
注解和Dubbo注册到Nacos中的相关信息。
至此,我们的服务提供者就创建完成了。