从 React 应用程序连接到 azure 服务总线客户端

问题描述 投票:0回答:1

我需要帮助来了解是否可以从 React 应用程序连接到 Azure 服务总线客户端,并且仍然可以向队列发送消息和从队列接收消息。

我没有在互联网上找到任何从 React 代码调用 Azure 服务总线的示例。我在 Node.js 中尝试了以下代码,它工作正常。如果我尝试在 React 组件中使用相同的代码,则在尝试将消息发送到队列时会失败,从而在控制台中产生超时。

    import * as asb from "@azure/service-bus";

    const serviceBus = new asb.ServiceBusClient(<connectionStringSender>);
    const sender = serviceBus.createSender(<inputQueue>);
    await sender.sendMessages({
        body: "Hello",
        applicationProperties: { "my-property": "my-value" },
        messageId:123,
    });
    console.log("Message sent");
    await sender.close();


    const serviceBusRecevier = new asb.ServiceBusClient(<connectionStringReceiver>);
    const receiver = serviceBusRecevier.createReceiver(<outputQueue>);
    console.log("Waiting for messages...");
    const messages = await receiver.receiveMessages(5, { maxWaitTimeInMs: 10000 });
    for (const message of messages) {
        console.log(`Message Received: ${message.body}`);
        await receiver.completeMessage(message);
    }
reactjs azure azureservicebus azure-servicebus-queues
1个回答
0
投票

我尝试了下面的 React js 代码来向 Azure 服务总线队列发送和接收消息。

代码:

src/components/MessageSender.js

import React, { useState } from 'react';

function MessageSender() {
  const [message, setMessage] = useState('');

  const sendMessage = async () => {
    try {
      await fetch('/send-message', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify({ message }),
      });

      setMessage('');
    } catch (error) {
      console.error(error);
    }
  };

  return (
    <div>
      <h2>Send Message</h2>
      <input
        type="text"
        placeholder="Enter message"
        value={message}
        onChange={(e) => setMessage(e.target.value)}
      />
      <button onClick={sendMessage}>Send</button>
    </div>
  );
}

export default MessageSender;

src/components/MessageReceiver.js

import React, { useEffect, useState } from 'react';

function MessageReceiver() {
  const [messages, setMessages] = useState([]);

  useEffect(() => {
    const receiveMessages = async () => {
      try {
        const response = await fetch('/receive-messages');
        const data = await response.json();
        setMessages(data);
      } catch (error) {
        console.error(error);
      }
    };

    receiveMessages();
  }, []);

  return (
    <div>
      <h2>Received Messages</h2>
      <ul>
        {messages.map((message, index) => (
          <li key={index}>{message}</li>
        ))}
      </ul>
    </div>
  );
}

export default MessageReceiver;

src/App.js

import React from 'react';
import MessageSender from './components/MessageSender';
import MessageReceiver from './components/MessageReceiver';

function App() {
  return (
    <div>
      <MessageSender />
      <MessageReceiver />
    </div>
  );
}

export default App;

服务器.js

const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const { ServiceBusClient } = require('@azure/service-bus');

const app = express();
const port = process.env.PORT || 5000;

app.use(cors());
app.use(bodyParser.json());

const connectionString = '<servicebus-queue-connec-string>';
const queueName = '<Queue-name>';
const serviceBusClient = new ServiceBusClient(connectionString);

app.post('/send-message', async (req, res) => {
  try {
    const sender = serviceBusClient.createSender(queueName);
    const messageBody = req.body.message;

    await sender.sendMessages({
      body: messageBody,
    });

    await sender.close();
    res.status(200).send('Message sent successfully');
  } catch (error) {
    console.error(error);
    res.status(500).send('Error sending message');
  }
});

app.get('/receive-messages', async (req, res) => {
  try {
    const receiver = serviceBusClient.createReceiver(queueName);

    const messages = await receiver.receiveMessages(5, { maxWaitTimeInMs: 10000 });

    await receiver.close();

    res.status(200).json(messages.map((message) => message.body));
  } catch (error) {
    console.error(error);
    res.status(500).send('Error receiving messages');
  }
});

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});

输出

运行成功如下,

enter image description here

然后,我从 Postman 向 Azure 服务总线队列发送一条消息,如下所示,

我使用上面的输出URL将其设置为POST,并保留它以发送我想要在Body中作为JSON发送的消息,然后单击Send

enter image description here

我在 Azure 门户的服务总线队列中收到了上述消息,如下所示,

enter image description here

然后,我发送了另一个 GET 请求以接收在 Postman 中发送的消息,如下所示,

我收到了两条消息,我使用下面的 React 应用程序将其发送到 Azure 服务总线,

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.