美文网首页
2019-12-15 Spring Cloud微服务从入门到入土

2019-12-15 Spring Cloud微服务从入门到入土

作者: NoelleMu | 来源:发表于2019-12-15 15:02 被阅读0次

    启动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

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>wendev-microservice</artifactId>
            <groupId>site.wendev.microservice</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>wendev-provider</artifactId>
    
        <dependencies>
            <dependency>
                <groupId>site.wendev.microservice</groupId>
                <artifactId>wendev-api</artifactId>
                <version>${project.version}</version>
            </dependency>
    
            <!-- JUnit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
    
            <!-- MySQL -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
    
            <!-- Spring Boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    <!--        <dependency>-->
    <!--            <groupId>org.springframework.boot</groupId>-->
    <!--            <artifactId>spring-boot-devtools</artifactId>-->
    <!--        </dependency>-->
    <!--        <dependency>-->
    <!--            <groupId>org.springframework</groupId>-->
    <!--            <artifactId>springloaded</artifactId>-->
    <!--        </dependency>-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
                <version>2.2.1.RELEASE</version>
            </dependency>
            <!-- End Spring Boot -->
    
            <!-- ZipKin -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zipkin</artifactId>
            </dependency>
    
            <!-- Nacos Discovery -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.cloud</groupId>
                        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!-- Netty -->
            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-all</artifactId>
            </dependency>
    
            <!-- Dubbo -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo-registry-nacos</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba.spring</groupId>
                <artifactId>spring-context-support</artifactId>
            </dependency>
        </dependencies>
    
    </project>
    

    其中引入了我们上一篇文章中所讲的公共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微服务从入门到入土

          本文链接:https://www.haomeiwen.com/subject/vdgknctx.html