从零搭建springcloud微服务(二)----微服务服务方cloud-provider

一、微服务服务方的搭建
1.File—>New—>Module

2.选择Spring Initializr,选择对应的JDK,
Choose Initializr Server URL 选择 default。
Next。

3.输入项目组Group:com.plkd。
组件名称Artifact:cloud-provider。
Type:选择Maven Project。
version:0.0.1-SNAPSHOT。
修改自动生成的Package:com.plkd.provider
修改自动生成的description:微服务服务方。
Next。

4.dependencies选择Alibaba—>Nacos Service Discovery。
Spring Boot选择你需要的版本,我这选择2.2.5。
Next。

5.Project Name一般不做修改,和组件名称Artifact一样。
Content root、Module file location 均按自动生成,不做修改。
Finish。

 6.修改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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.plkd</groupId>
<artifactId>cloud-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../cloud-dependencies</relativePath><!-- lookup parent from repository -->
</parent>
<groupId>com.plkd</groupId>
<artifactId>cloud-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloud-provider</name>
<description>微服务服务方</description>

<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
同时调整cloud-dependencies模块的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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- 默认值为…/pom.xml,查找顺序:relativePath元素中的地址–本地仓库–远程仓库 -->
</parent>
<groupId>com.plkd</groupId>
<artifactId>cloud-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>cloud-dependencies</name>
<packaging>pom</packaging>
<description>项目依赖管理</description>

<repositories><!-- 远程仓库地址 -->
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>

<properties>
<java.version>1.8</java.version>
<spring-cloud-alibaba.version>2.2.0.RELEASE</spring-cloud-alibaba.version>
</properties>

<dependencies><!-- dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承) -->
</dependencies>

<dependencyManagement><!-- dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。 -->
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
</build>

</project>

7.在application.properties中配置 Nacos server的地址:
server.port=8070
spring.application.name=cloud-provider
spring.cloud.nacos.discovery.server-addr=121.36.217.132:8848

 

8.CloudProviderApplication类新增Rest方法
@RestController
class EchoController {
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}

需要在cloud-provider模块的pom文件中额外添加

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

9.通过Spring Cloud原生注解 @EnableDiscoveryClient开启服务注册发现功能

 

 10.启动服务
如果提示以下类似错误,那是因为1.2.0版本nacos server里配置了nacos.core.auth.enabled=true(这个开关采用了热加载模式,无需重启Server即可生效。因此当权限控制功能使用有异常时,可以直接回滚到不鉴权的模式。)

java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all servers([121.36.217.132:8848]) tried: failed to req API:121.36.217.132:8848/nacos/v1/ns/instance. code:403 msg: <html><body><h1>Whitelabel Error Page</h1><p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p><div id='created'>Wed Mar 18 16:28:39 CST 2020</div><div>There was an unexpected error (type=Forbidden, status=403).</div><div>unknown user!</div></body></html>

解决方案:

在application.properties中增加配置

spring.cloud.nacos.discovery.username=nacos(实际用户)
spring.cloud.nacos.discovery.password=nacos(实际用户密码)

然后重新启动服务。

 

 登录nacos server

 

 可以看到服务列表中存在了服务提供者。

参考文档:
https://blog.csdn.net/csuzxm2000/article/details/86511847
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

 

posted @ 2020-03-18 18:25  michaelqmd  阅读(1130)  评论(2编辑  收藏  举报