On 2/14/07, Aleksi Kallio <[EMAIL PROTECTED]> wrote:

There has been discussion regarding FileMessage or something similar: a
message for transferring large amounts of data.

For background, see:
http://issues.apache.org/activemq/browse/AMQ-1075

We need something that offers better service than streaming, of course
by building on top of it. That is why we would be interested in this and
ready to contribute our effort into making it happen.

We have to be capable of moving BIG files over JMS, in the order of
couple of gigabytes. Normally they are a lot smaller, but also the big
ones must be handled.

Features/fixes we are looking for are:

1) streaming requires dedicated destination, which makes things complicated
2) resuming transfers
3) easy monitoring of progress


 From core developers we would appreciate feedback on how to proceed
with developing such a feature. From rest of the communinity we would
gladly get feedback on how you would like this to be done and what kind
of API would be the best.


In the spirit of making ActiveMQ even better,

Sounds great! Welcome!

The comments on the JIRA issue describe the kind of API I was thinking of...
http://issues.apache.org/activemq/browse/AMQ-1075


There are a few different possible implementations...

(i) FileMessage ends up being a wrapper on top of the existing JMS streams
http://activemq.apache.org/jms-streams.html

(ii) FileMessage uses some out of band transfer mechanism. e.g. the
FileMessage essentially just carries around a URL; then the file is
transferred using some FTP/HTTP site. e.g. the producer sends to the
remote file/web server, then sends the message with a reference to it.
i.e. using an out-of-band transfer mechanism. The benefit of this is
that existing file/web servers can be used for the actual file
transfer piece, then the message broker can be used for reliable
message load balancing and failover. i.e. making sure exactly one
consumer processes the message properly, in a transactional way etc.

(iii) direct connection. This option is similar to (ii) but rather
than putting the file on some remote file server, the file stays on
the producer until the consumer has received it; also the producer
listens on a socket for the consumer. Then the FileMessage includes a
URL which when opened on the consumer will essentially connect
directly to the producer of the file. So the FileMessage is a normal
JMS message sent around the JMS network (over clusters & network store
& forward etc). Then when its finally received by a consumer, the
consumer opens the URL which in effect causes the consumer to connect
directly to the producer, to then stream the file.

All of these options have different strengths and weaknesses. I think
for many use cases (iii) is good but I could see folks liking (i) and
(ii) as well.

The nice thing is I think all of these approaches can be handled
nicely by the single FileMessage API; then it can be a
configuration/policy issue as to exactly which implementation is used.

In terms of getting started, the simplest route is probably to add the
API in first (to start with assuming just a URL to the file which is a
no brainer) then we should be able to start adding different providers
to suit.

BTW we might also want to support senders providing a File rather than
an InputStream if you want to be able to monitor progress (as with a
stream you've no idea how long its gonna be)

--

James
-------
http://radio.weblogs.com/0112098/

Reply via email to