Why does ActiveMQ hold messages that should be deleted from Topic?

Posted by rauch on Stack Overflow See other posts from Stack Overflow or by rauch
Published on 2010-03-22T09:59:26Z Indexed on 2010/03/22 10:01 UTC
Read the original article Hit count: 356

Filed under:
|
|
|
|

I use ActiveMQ as Notification System(Pub/Sub model). On server: if any changes of data occur, Server send this updated data (File) to Topic using BlobMessages. There are few Clients, that subscribe on this Topic and get updated File if it exsist in Topic.


The problem is that all of BlobMessages, that were sent to Topic, are hold by ActiveMQ all time.


this.producer = new ProducerTool.Builder("tcp://localhost:61616?jms.blobTransferPolicy.uploadUrl=http://localhost:8161/fileserver/",
                "ServerProdTopic").topic(true)
                .transacted(false).durable(false).timeToLive(10000L).build();
this.consumer = new ConsumerTool.Builder("tcp://localhost:61616", "ServerConsTopic").topic(true)
                .transacted(false).durable(false).build();

        consumer.setMessageListener(this);

The File is sent:


connection = createConnection();
session = createSession(connection);
producer = createProducer(session);
BlobMessage blobMsg = ((ActiveMQSession) session).createBlobMessage(resource);
blobMsg.setStringProperty("sourceName", resource.getName());

producer.send(blobMsg);
if (transacted) {
    System.out.println("Producer Committing...");
    session.commit();
}

Where createProducer is:


protected Connection createConnection() throws JMSException, Exception {
   ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url);
   //connectionFactory.getBlobTransferPolicy().setUploadUrl("http://localhost:8161/fileserver/");
   Connection connection = connectionFactory.createConnection();
    connection.start();
    ((ActiveMQConnection) connection).setCopyMessageOnSend(false);
    return connection;
}

All, that could be useful I set as need: Session.AUTO_ACKNOWLEDGE; Non-Durable Subscription; TimeToLive = 9000; JMSDeliveryMode = Non-Persistent;


What I have at runtime: in ActiveMQ directory: ~/apache-activemq-5.3.0/webapps/fileserver/ tere are all File, that where delivered and not delivered to Subscribers. Why? Sometimes Server send Big Files about 1 GB....And even this Files are hold at that directory, Even after stopping Subscribers(Clients), Publisher(Server) and ActiveMQ Broker.

© Stack Overflow or respective owner

Related posts about java

Related posts about jms