一、微服務服務方的搭建
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