当前位置: 首页 > 知识库问答 >
问题:

Windows Server(1.1)上使用Java和AMQP 1.0的服务总线消息大小问题

钮长恨
2023-03-14

我们使用下面的AMQP JAR将消息从java发送到windows server(1.1)上service bus中的队列设置。发送小消息时没有问题,但无法发送pre-prod中大小超过45kb、prod中大小超过160kb的消息。消息根本没有进入队列,java端也没有异常

geronimo-jms\u 1.1\u spec-1.0.1。jar qpid-amqp-1-0-client-0.22。jar qpid-amqp-1-0-client-jms-0.22。jar qpid-amqp-1-0-common-0.22。罐子

接收到的消息在网关配置中正确配置。

我只是想知道是什么导致了邮件大小的限制?任何帮助都将不胜感激。

谢谢你,斯里。

共有2个答案

艾才良
2023-03-14

我有同样的问题。无法发送大于256kb的消息。出错链接已分离。

问题在于服务总线的配置。默认情况下,SB不允许大于256kb的消息。我们不得不更改配置以允许更大的消息

周龙光
2023-03-14

这是我编写的发送一条消息(109 kb)的小测试程序。我在java端没有收到任何异常,而且消息也没有出现在服务总线队列中。

import org.apache.qpid.amqp_1_0.jms.impl.*;
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.net.URLEncoder;
import java.util.Hashtable;
import java.io.*;

public class ServiceBusPublisher {

public static void main(String[] args) throws Exception {               
    String userName = "test";
    String password = "test";       
    String fqdn = "test@test.com";

    String connectionString = "amqps://" + encode(userName) + ":" + encode(password) + "@" + fqdn;


        File file = new File("D:\\temp\\test.xml");
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuffer stringBuffer = new StringBuffer();
    String line;
    while ((line = bufferedReader.readLine()) != null) {
        stringBuffer.append(line);
        stringBuffer.append("\n");
    }
    bufferedReader.close();
    fileReader.close();

    String messageText = stringBuffer.toString();         

    System.out.print("Initial setup\n");
        Hashtable<String, String> env = new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.qpid.amqp_1_0.jms.jndi.PropertiesFileInitialContextFactory");
        env.put(Context.PROVIDER_URL, "blah.txt");
        env.put("connectionfactory.ServiceBusConnectionFactory", connectionString);
        Context context = null;
        ConnectionFactory connectionFactory = null;
        Connection connection = null;
        try
        {
            System.out.print("Creating context\n");
            context = new InitialContext(env);
            System.out.print("Creating connection factory\n");
            connectionFactory = (ConnectionFactory)context.lookup("ServiceBusConnectionFactory");
            System.out.print("Creating connection\n");
            connection = connectionFactory.createConnection();
        }
        catch (Exception e)
        {
            System.out.print("Exception creating context/connection factory/connection\n");
            System.out.print(e.toString());
            return;
        }

        Session session = null;
        MessageProducer producer = null;
        try
        {
            System.out.print("Creating session\n");
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            System.out.print("Creating producer\n");
            producer = session.createProducer(QueueImpl.createQueue("MessageProcessingService-PRE/testqueue"));                                                        
        }
        catch (Exception e)
        {
            System.out.print("Exception creating session/producer\n");
            System.out.print(e.toString());
            return;
        }

        try
        {
            System.out.print("Creating message\n");
            BytesMessage message = session.createBytesMessage();                
            message.writeBytes(messageText.getBytes("UTF-8"));              
            message.setStringProperty("JMSXGroupID", "MessageProcessingService-PRE/testqueue");
            System.out.print("Sending\n");
            producer.send(message);             
        }
        catch (Exception e)
        {
            System.out.print("Exception creating message and sending\n");
            System.out.print(e.toString());
            return;
        }           

        try
        {
            System.out.print("Cleaning up\n");
            producer.close();
            session.close();
            connection.stop();
            connection.close();
        }
        catch (Exception e)
        {
            System.out.print("Exception closing producer and session\n");
            System.out.print(e.toString());
        }
}

public static String encode(String encodee)
    {
        String retval = "";
        try { retval = URLEncoder.encode(encodee, "UTF-8"); } catch (Exception e) { System.out.print("Encoding failed\n"); }
        return retval;
    }

}

 类似资料:
  • 我要问的问题以前在这里被问过。David Ingham在背诵此Microsoft文档时给出了答案。Sentinel已确认该解决方案有效。 然而,我也有同样的问题。我严格遵守Microsoft文档,但仍然存在相同的问题。 冒着冗余的风险,问题是当使用Qpid-JMS客户端库(版本0.22或0.26)连接到Windows Server(非Azure)上的服务总线(1.1)并遵循Microsoft的所有

  • 我在Azure中托管了两个云服务辅助角色,一个使用NServiceBus(Azure服务总线传输)消耗消息,另一个生成消息。 昨天,我部署了一个新版本的生产者工作者角色,而队列中仍然有大量消息,因为我们正在处理早上遗留下来的大量消息。当生产者启动时,它似乎已经清空(或者可能重新创建)队列,许多重要的生产消息丢失。这似乎很奇怪,但日志显示,大约在生产者角色启动时,消费者没有处理进一步的消息,我们知道

  • 我已经创建了一个简单的窗口服务来使用来自Azure服务总线队列的消息。我使用TopShelch创建windows服务。下面的代码从这里剪切如下示例:https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-dotnet-get-started-with-queues 高频。Run(); ServiceBusHe

  • 我正在尝试在Azure中构建一个简单的WebAPI REST服务,后端有一个服务总线队列工作器。我可以从Web API向工作人员发送一条消息。然而,我试图发送更多的信息,只是为了看看一切是如何运作的。因此,我创建了一个简单的控制器,如下所示: 当我呼叫控制器时,我只收到工作人员接收到的大约1/2的消息。其余的似乎都被放弃了。

  • 我已经查看了有关Azure Service Bus调度的文档,但我不清楚如何确切地从“断开连接的”总线发送消息。 以下是我如何配置在服务器上处理消息的服务: 我明确调用了。 在创建消息并将消息发送到队列的项目中(在不同的上下文中运行,因此执行“仅发送”),我们有以下内容: 现在,要发送预定消息,我们这样做: 我不确定需要向目标地址传递什么。 我尝试过:-<代码>服务URI-`{serviceUri

  • 按照这里的说明https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-java-how-to-use-queues测试一个java应用程序来连接,发送和接收消息 使用azure messaging servicebus的7.0.2版本,一切正常。 然而,当我更新版本时,在构建时或运行时都会出现错误。 我知道它