2019-12-15 Spring Cloud微服务从入门到入土(2)使用Nacos进行服务注册与发现

启动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中的相关信息。

至此,我们的服务提供者就创建完成了。

你可能感兴趣的:(2019-12-15 Spring Cloud微服务从入门到入土(2)使用Nacos进行服务注册与发现)