0

We are using below AMQP jars to send messages from java to the queue setup in service bus on windows server(1.1). No issues in sending small messages but unable to send messages which got size more than 45kb in pre prod and 160kb in prod. The message is not hitting the queue at all and no exception at java side.

geronimo-jms_1.1_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.jar

Received message is correctly configured in gateway config.

I am just wondering whats causing this message size limitation? Any help would be greatly appreciated.

Thank you, Sri.

garim
  • 11
  • 1

2 Answers2

0

Here is the small test program I wrote to send one message(109 kb). I am not getting any exception at java side and also the message is not appearing in service bus queue.

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;
    }

}

garim
  • 11
  • 1
  • I could send message of small size without any issues with above code. – garim Apr 05 '17 at 13:45
  • I tried above test with 0.32 jar and now getting below exception javax.jms.JMSException: Link was detachedjavax.jms.JMSException: Link was detached at org.apache.qpid.amqp_1_0.jms.impl.MessageProducerImpl$DispositionAction.wasAccepted(MessageProducerImpl.java:524) at org.apache.qpid.amqp_1_0.jms.impl.MessageProducerImpl.send(MessageProducerImpl.java:336) at org.apache.qpid.amqp_1_0.jms.impl.MessageProducerImpl.send(MessageProducerImpl.java:240) at ServiceBusPublisher.main(ServiceBusPublisher.java:92)s and now I am getting below exception – garim Apr 05 '17 at 14:00
0

I had the same problem. could not send messages bigger then 256kb. Got error Link was detached.

The problem was in configuration of service bus. By default SB does not allow messages bigger then 256kb. We had to change the config to allow bigger messages.