Use .convertBodyTo(String.class) after the from. This will store the HTTP
data
as a String which can be safely duplicated when you do a multicast.
Is the problem is really caused by duplicating message?
If it does, does the multi-cast support a strategy for end-user who can
control how to duplicate the data saved in message?
-----Original-----
Sender: Claus Ibsen [mailto:claus.ib...@gmail.com]
Date: 2010-1-11 14:18
Receiver: users@camel.apache.org
Subject: Re: Question about multicasting.
On Mon, Jan 11, 2010 at 7:00 AM, ztesoft <njche...@hotmail.com> wrote:
Dears, I try to use multicast to save the received message into two files
using
"from("jetty:http://0.0.0.0:8080/").multicast().to("file://output","file://o
utput1");"
It works correctly. Two files will be saved in /output/.camel/ and
/output1/.camel/ folders separately.
But if I use activemq for a endpoint, there may be something wrong.
1st. I use activemy queue instead of the second endpoint.
from("jetty:http://0.0.0.0:8080/").multicast().to("file://output","test-jms:
queue:test.queue");
from("test-jms:queue:test.queue").process(new Processor() {
public void process(Exchange e) throws IOException {
System.out.println("Received exchange: " +
e.getIn());
System.out.println(e.getIn().getBody(String.class));
}
});
}
});
In this case, when I send a HTTP request, the result is one file saved in
/output/ folder and a message displayed in console. The content of this
message is:
"Received exchange: JmsMessage: ActiveMQBytesMessage {commandId = 5,
responseRequired = true, messageId =
ID:chenyi-4710-1263188603156-2:2:1:1:1,
originalDestination = null, originalTransactionId = null, producerId =
ID:chenyi-4710-1263188603156-2:2:1:1, destination = queue://test.queue,
transactionId = null, expiration = 1263188625859, timestamp =
1263188605859,
arrival = 0, brokerInTime = 1263188605859, brokerOutTime = 1263188605859,
correlationId = 5a1b6157-a4cb-4f8a-aa78-82519a776bf0, replyTo =
temp-queue://ID:chenyi-4710-1263188603156-2:1:1, persistent = true, type =
null, priority = 4, groupID = null, groupSequence = 0, targetConsumerId =
null, compressed = false, userID = null, content =
org.apache.activemq.util.byteseque...@6a63d3, marshalledProperties = null,
dataStructure = null, redeliveryCounter = 0, size = 1024, properties =
{CamelHttpUrl=http://127.0.0.1:8080/,
Content_HYPHEN_Type=text/xml;charset=UTF-8, Host=127.0.0.1:8080,
CamelHttpMethod=POST, Content_HYPHEN_Length=681,
SOAPAction="http://www.ctcc.com/service/sendSms",
CamelHttpCharacterEncoding=UTF-8, User_HYPHEN_Agent=Jakarta
Commons-HttpClient/3.0.1, CamelHttpPath=/, CamelHttpUri=/},
readOnlyProperties = true, readOnlyBody = true, droppable = false}
ActiveMQBytesMessage{ bytesOut = null, dataOut = null, dataIn =
java.io.datainputstr...@bfed5a }"
2nd.
I change the order for the multicast endpoint.
from("jetty:http://0.0.0.0:8080/").multicast().to("test-jms:queue:test.queue
","file://output");
from("test-jms:queue:test.queue").process(new Processor() {
public void process(Exchange e) throws IOException {
System.out.println("Received exchange: " +
e.getIn());
System.out.println(e.getIn().getBody(String.class));
}
});
}
});
In this case, when I send a HTTP request, the message displayed correctly
in
th console(the http request body displayed). But there is not any file
saved
in any folder.
Does anyone know the reasons and how to solve this problem?
--
Use .convertBodyTo(String.class) after the from. This will store the
HTTP data as a String which can be safely duplicated when you do a
multicast.
View this message in context:
http://old.nabble.com/Question-about-multicasting.-tp27106219p27106219.html
Sent from the Camel - Users mailing list archive at Nabble.com.