创建服务提供者


# 创建服务提供者

# 创建案例工程项目

创建一个名为 spring-cloud-alibaba-dubbo-examples 的工程项目

# POM

    <?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">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.cmcc</groupId>
        <artifactId>spring-cloud-alibaba-dubbo-examples</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>pom</packaging>
    
        <url>http://www.cmcc.com</url>
    
        <modules>
            <module>spring-cloud-alibaba-dubbo-provider</module>
            <module>spring-cloud-alibaba-dubbo-consumer</module>
        </modules>
    
        <properties>
            <java.version>1.8</java.version>
            <maven.compiler.source>${java.version}</maven.compiler.source>
            <maven.compiler.target>${java.version}</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    
            <spring-boot.version>2.1.1.RELEASE</spring-boot.version>
            <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <!-- Spring -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>${spring-boot.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
    
                <!-- Projects -->
                <dependency>
                    <groupId>com.cmcc</groupId>
                    <artifactId>spring-cloud-alibaba-dubbo-starter</artifactId>
                    <version>${project.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <profiles>
            <profile>
                <id>release</id> <!-- 部署要用到 -->
                <build>
                    <plugins>
                        <plugin>
                            <artifactId>maven-compiler-plugin</artifactId>
                        </plugin>
                        <!-- Source -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-source-plugin</artifactId>
                            <version>3.0.1</version>
                            <executions>
                                <execution>
                                    <phase>package</phase>
                                    <goals>
                                        <goal>jar-no-fork</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                        <!-- Javadoc -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-javadoc-plugin</artifactId>
                            <version>2.9.1</version>
                            <executions>
                                <execution>
                                    <phase>package</phase>
                                    <goals>
                                        <goal>jar</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                        <!-- GPG -->
                        <plugin> <!-- 进行延签 -->
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-gpg-plugin</artifactId>
                            <version>1.6</version>
                            <executions>
                                <execution>
                                    <phase>verify</phase>
                                    <goals>
                                        <goal>sign</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </build>
                <distributionManagement>
                    <snapshotRepository>
                        <id>oss</id>
                        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
                    </snapshotRepository>
                    <repository>
                        <id>oss</id>
                        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                    </repository>
                </distributionManagement>
            </profile>
        </profiles>
    
        <licenses>
            <license>
                <name>The Apache Software License, Version 2.0</name>
                <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
                <comments>A business-friendly OSS license</comments>
            </license>
        </licenses>
    
        <scm>
            <url>https://github.com/github1013/spring-cloud-alibaba-dubbo</url>
            <connection>scm:githttps://github.com/github1013/spring-cloud-alibaba-dubbo.git</connection>
            <developerConnection>scm:git:https://github.com/github1013/spring-cloud-alibaba-dubbo.git</developerConnection>
        </scm>
    
        <developers>
            <developer>
                <name>cmcc</name>
                <email>136913633167@163.com</email>
                <url>http://www.cmcc.com</url>
            </developer>
        </developers>
        <repositories>
            <repository>
                <id>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>https://repo.spring.io/libs-milestone</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    </project>
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152

# 创建服务提供者

创建一个名为 spring-cloud-alibaba-dubbo-provider 的模块,其父工程为 spring-cloud-alibaba-dubbo-examples

# POM

    <?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">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.cmcc</groupId>
            <artifactId>spring-cloud-alibaba-dubbo-examples</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>spring-cloud-alibaba-dubbo-provider</artifactId>
        <packaging>pom</packaging>
        <url>http://www.cmcc.com</url>
    
        <modules>
            <module>spring-cloud-alibaba-dubbo-provider-api</module>
            <module>spring-cloud-alibaba-dubbo-provider-service</module>
        </modules>
    </project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 创建服务提供者接口

创建一个名为 spring-cloud-alibaba-dubbo-provider-api 的模块,其父工程为 spring-cloud-alibaba-dubbo-provider

# POM

    <?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">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.cmcc</groupId>
            <artifactId>spring-cloud-alibaba-dubbo-provider</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>spring-cloud-alibaba-dubbo-provider-api</artifactId>
        <url>http://www.cmcc.com</url>
    
        <dependencies>
            <dependency>
                <groupId>com.cmcc</groupId>
                <artifactId>spring-cloud-alibaba-dubbo-starter</artifactId>
                <scope>provided</scope>
            </dependency>
        </dependencies>
    
    </project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 定义接口

# ProviderService

    package com.cmcc.alibaba.dubbo.provider.service;
    
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @FeignClient("provider")
    public interface ProviderService {
        @GetMapping("/hi")
        String hi();
    }
1
2
3
4
5
6
7
8
9
10

# FooService

    package com.cmcc.alibaba.dubbo.provider.service;
    
    import org.springframework.cloud.openfeign.FeignClient;
    import org.springframework.web.bind.annotation.GetMapping;
    
    @FeignClient("provider")
    public interface FooService {
        @GetMapping("/foo")
        String foo();
    }
1
2
3
4
5
6
7
8
9
10

# 创建服务提供者实现

创建一个名为 spring-cloud-alibaba-dubbo-provider-service 的模块,其父工程为 spring-cloud-alibaba-dubbo-provider

# POM

    <?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">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.cmcc</groupId>
            <artifactId>spring-cloud-alibaba-dubbo-provider</artifactId>
            <version>1.0.0-SNAPSHOT</version>
        </parent>
    
        <artifactId>spring-cloud-alibaba-dubbo-provider-service</artifactId>
        <url>http://www.cmcc.com</url>
    
        <dependencies>
            <dependency>
                <groupId>com.cmcc</groupId>
                <artifactId>spring-cloud-alibaba-dubbo-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.cmcc</groupId>
                <artifactId>spring-cloud-alibaba-dubbo-provider-api</artifactId>
                <version>${project.parent.version}</version>
            </dependency>
        </dependencies>
    
    </project>
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

# 实现接口

    package com.cmcc.alibaba.dubbo.provider.service.impl;
    
    import com.cmcc.alibaba.dubbo.provider.service.ProviderService;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class ProviderServiceImpl implements ProviderService {
        @Override
        public String hi() {
            return "Hi Spring Cloud Alibaba Dubbo";
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
    package com.cmcc.alibaba.dubbo.provider.service.impl;
    
    import com.cmcc.alibaba.dubbo.provider.service.FooService;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class FooServiceImpl implements FooService {
        @Override
        public String foo() {
            return "Foo Spring Cloud Alibaba Dubbo";
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12

# Application

    package com.cmcc.alibaba.dubbo.provider;
    
    import com.alibaba.dubbo.config.ProtocolConfig;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.context.annotation.Bean;
    
    @EnableDiscoveryClient
    @SpringBootApplication
    public class ProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class, args);
        }
    
        @Bean
        public ProtocolConfig protocolConfig() {
            ProtocolConfig protocolConfig = new ProtocolConfig();
            protocolConfig.setPort(20880);
            protocolConfig.setName("dubbo");
            return protocolConfig;
        }
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# application.yml

    spring:
      main:
        allow-bean-definition-overriding: true
      application:
        name: provider
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.10.146:8848
    
    server:
      port: 10101
    
    dubbo:
      application:
        name: provider
      registry:
        address: nacos://192.168.10.146:8848
      scan:
        basePackages: com.cmcc.alibaba.dubbo.provider.service
    
    management:
      endpoints:
        web:
          exposure:
            include: "*"
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

# 运行测试

访问 Nacos 可以看到同时注册了 Dubbo 和 Http 服务

更新: 6/10/2022, 8:49:50 AM