Spring Eureka 是 Spring Cloud Netflix 堆疊的一部分,是一個服務登錄檔,允許服務自行註冊並發現其他已註冊的服務。將 Node.js 應用程式與 Spring Eureka 整合涉及使用 Eureka 註冊 Node.js 服務並發現使用 Eureka 註冊的其他服務。
本指南將逐步指導您完成整個過程。
先決條件
- 對 Node.js 和 Java Spring Boot 有基本的瞭解
- 已安裝 Node.js 和 npm
- 使用 Eureka 伺服器設定的 Spring Boot 專案
- Eureka 伺服器正在執行
設定Eureka伺服器
首先,確保您的 Eureka 伺服器已設定並正在執行。如果沒有,請按照以下步驟操作:
1、使用 Eureka Server 建立 Spring Boot 專案:
<!-- pom.xml --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
|
2、在Spring Boot應用程式中啟用Eureka伺服器:
<font>// EurekaServerApplication.java<i> @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
|
3、配置Eureka伺服器屬性:
# application.properties spring.application.name=eureka-server server.port=8761
eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
|
4、執行Eureka伺服器:
mvn spring-boot:run
Eureka 儀表板應該可以透過 http://localhost:8761 訪問。
使用 Eureka 註冊 Node.js 應用程式
步驟 1:安裝依賴項
為 Eureka 客戶端安裝所需的 npm 軟體包。
npm install eureka-js-client axios
第 2 步:配置 Eureka 客戶端
建立 eureka-client.js 檔案並配置 Eureka 客戶端。
const Eureka = require('eureka-js-client').Eureka;
<font>// Configure Eureka client<i> const client = new Eureka({ instance: { app: 'nodejs-service', hostName: 'localhost', ipAddr: '127.0.0.1', port: { '$': 3000, '@enabled': 'true', }, vipAddress: 'nodejs-service', dataCenterInfo: { '@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo', name: 'MyOwn', }, }, eureka: { host: 'localhost', port: 8761, servicePath: '/eureka/apps/' } });
// Start Eureka client<i> client.start(error => { console.log('Eureka client started with error:', error); }); Step 3: Create a Simple Node.js Service Create a simple Express application in app.js. const express = require('express'); const app = express(); const port = 3000;
app.get('/', (req, res) => { res.send('Hello from Node.js service!'); });
app.listen(port, () => { console.log(`Node.js service listening at http://localhost:${port}`);<i> });
// Import and start Eureka client<i> require('./eureka-client');
|
第 4 步:執行 Node.js 服務
node app.js
您的 Node.js 服務現在應該已在 Eureka 伺服器註冊。您可以訪問 http://localhost:8761 的 Eureka 皮膚來驗證這一點。
發現已在 Eureka 註冊的服務
第 1 步:安裝用於 HTTP 請求的 Axios
npm install axios
第 2 步:建立服務發現函式
在 eureka-client.js 中,新增一個發現服務的函式。
const axios = require('axios');
function getServiceUrl(serviceName) { return new Promise((resolve, reject) => { client.getInstancesByAppId(serviceName, (error, instances) => { if (error) { return reject(error); } if (instances.length === 0) { return reject(new Error('No instances available')); } const instance = instances[0]; const serviceUrl = `http:<font>//${instance.hostName}:${instance.port.$}`;<i> resolve(serviceUrl); }); }); }
module.exports = { getServiceUrl }; Step 3: Use Service Discovery in Your Application Modify app.js to use the service discovery function. const express = require('express'); const { getServiceUrl } = require('./eureka-client'); const axios = require('axios');
const app = express(); const port = 3000;
app.get('/', async (req, res) => { try { const serviceUrl = await getServiceUrl('another-service'); const response = await axios.get(`${serviceUrl}/api`); res.send(`Response from another service: ${response.data}`); } catch (error) { res.status(500).send('Error discovering service: ' + error.message); } });
app.listen(port, () => { console.log(`Node.js service listening at http://localhost:${port}`);<i> });
// Import and start Eureka client<i> require('./eureka-client');
|
這種設定允許您的 Node.js 服務發現在 Eureka 註冊的其他服務並與之通訊,從而使您的微服務架構更具可擴充套件性和彈性!
祝您在程式設計之旅中好運,歡迎在評論區分享您的想法和經驗。