阿里巴巴開源 Nacos 定位是一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。Nacos 支持的功能包括服務發現,集成配置中心,和服務數據管理。本篇文章主要向你們分享關於 Spring Cloud Alibaba 集成 Nacos 框架來實現服務註冊。服務註冊是指項目啓動的時候,生產者將當前服務自身的信息地址註冊到Nacos server 註冊中心。html
建立Maven項目java
新建discovery-nacos-provider-demo01命名的項目。Maven項目搭建完成後,總體目錄結構以下圖所示:git
新建pom.xml文件github
在文件中增長依賴jar包配置信息,具體參考以下:web
<?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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.lidong</groupId> <artifactId>discovery-nacos-provider-demo01</artifactId> <version>1.0.0</version> <name>discovery-nacos-provider-demo01</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <gson.version>2.8.6</gson.version> <spring-cloud-alibaba.version>2.2.0.RELEASE</spring-cloud-alibaba.version> </properties> <dependencies> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>${spring-cloud-alibaba.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</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> <dependencyManagement> <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> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> </repository> </repositories> </project>
注:對於引入依賴的jar包簡單說明一下,本案例使用的是Spring Boot 2.2.5.RELEASE版本和Spring Cloud Alibaba 2.2.0.RELEASE版本,注意使用版本的兼容性,不然容易報錯。spring
1)健康檢查依賴於此包 spring-boot-starter-actuatorapache
2)Spring Cloud nacos 的服務發現支持 spring-cloud-starter-alibaba-nacos-discoveryjson
配置數據源源tomcat
在application.yml文件中添加配置信息以下:微信
server: port: 9001 spring: application: name: discovery-nacos-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848
配置參數說明:
server.port:9001 服務提供者的端口
spring.application.name 指註冊到nacos server的名稱,在後續發佈的「Spring Cloud Alibaba 集成 Nacos 構建微服務實現服務發現」章節【關注素文宅博客網站,Spring Cloud Alibaba框架系列文章持續更新中,微信公衆號「Java精選」,切換至聚合->開源項目->包含Spring Boot和Spring Cloud等系列文章】中會根據這個名稱來進行服務調用。
spring.application.cloud.nacos.discovery.server-addr: 127.0.0.1:8848 nacos地址和端口號默認是127.0.0.1:8848,若果沒有配置hosts參數其默認的地址是localhost,nacos服務會佔用8848端口。
新建實體類文件
新建BootUser實體類文件,用於賦值數據並返回給Json串數據給調用方,代碼以下:
package com.yoodb.study.nacos.demo01; public class BootUser { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
新建註冊服務
新建HelloWorldController類文件,提供provider接口,返回一個json字符串給調用方,具體代碼以下:
package com.yoodb.study.nacos.demo01; import com.google.gson.Gson; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloWorldController { @RequestMapping("/provider/{id}") public String provider(@PathVariable("id")Integer id) { BootUser user = new BootUser(); user.setId(id); user.setName("關注微信公衆號「Java精選」,Spring Cloud系列文章持續更新中" + ",帶你從入門到精通,玩轉Spring Cloud框架。"); String jsons = new Gson().toJson(user); return jsons; } }
添加啓動類
新建SCNSDemo01Application類文件,具體代碼以下:
package com.yoodb.study.nacos.demo01; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; /** * 服務註冊 */ @EnableDiscoveryClient @SpringBootApplication public class SCNSDemo01Application { public static void main(String[] args) { SpringApplication.run(SCNSDemo01Application.class, args); } }
@EnableDiscoveryClient註解是指開啓服務發現支持,讓註冊中心可以發現,掃描到該服務。
啓動Maven項目
項目啓動成功後,輸出日誌參考以下:
2020-03-26 21:29:55.474 INFO 34272 --- [ main] c.n.c.sources.URLConfigurationSource : To enable URLs as dynamic configuration sources, define System property archaius.configurationSource.additionalUrls or make config.properties available on classpath. 2020-03-26 21:29:55.707 INFO 34272 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2020-03-26 21:29:55.821 INFO 34272 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'Nacso-Watch-Task-Scheduler' 2020-03-26 21:29:59.313 INFO 34272 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator' 2020-03-26 21:29:59.428 INFO 34272 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 9001 (http) with context path '' 2020-03-26 21:29:59.573 INFO 34272 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP discovery-nacos-provider 10.115.51.132:9001 register finished 2020-03-26 21:30:01.276 INFO 34272 --- [ main] d.SpringCloudNacosStudyDemo01Application : Started SpringCloudNacosStudyDemo01Application in 14.489 seconds (JVM running for 17.618) 2020-03-26 21:30:02.201 INFO 34272 --- [)-10.115.51.132] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2020-03-26 21:30:02.202 INFO 34272 --- [)-10.115.51.132] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2020-03-26 21:30:02.211 INFO 34272 --- [)-10.115.51.132] o.s.web.servlet.DispatcherServlet : Completed initialization in 9 ms
服務提供者發佈成功。
請求接口地址:http://localhost:9001/provider/1,查看接口返回結果:
{"id":1,"name":"關注微信公衆號「Java精選」,Spring Cloud系列文章持續更新中,帶你從入門到精通,玩轉Spring Cloud框架。"}
訪問Nacos server地址,該服務在「Spring Cloud 從入門到精通(一)Nacos 服務中心初探」章節已經講述過,不瞭解的朋友能夠翻看一下,在此處就省略了:
http://192.168.101.196:8848/nacos/index.html
在控制檯會發現服務列表中有一個名爲discovery-nacos-provider的服務。
點擊控制檯詳情按鈕,能夠查看服務的詳細信息,參考如圖所示:
本文篇文章的項目源碼(discovery-nacos-provider-demo01)地址:https://github.com/yoodb/springcloud
至此,關於Spring Cloud 集成 Nacos框架實現服務註冊配置完畢,後續Spring Cloud系列文章持續更新中。下面朋友們能夠試一試搭建項目,有什麼疑問歡迎下方留言。