Node.js 連線到 Spring Eureka 實現服務發現

banq發表於2024-06-20

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 註冊的其他服務並與之通訊,從而使您的微服務架構更具可擴充套件性和彈性!

祝您在程式設計之旅中好運,歡迎在評論區分享您的想法和經驗。

相關文章