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

2019-12-15  本文已影响0人  NoelleMu

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

部分节点含义解释:

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

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

上一篇下一篇

猜你喜欢

热点阅读