[ 
https://issues.apache.org/jira/browse/CAMEL-3195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13000119#comment-13000119
 ] 

Chandra Prakash Joshi commented on CAMEL-3195:
----------------------------------------------


Below is one discussion that I had with Don Whytock about the design and need 
for this feature (The conversation is sorted in ascending order to provide full 
context)
----


Chandra Prakash Joshi <chandraprakashjoshi at gmail.com>         Sat, Oct 23, 
2010 at 7:42 PM
To: dwhytock at gmail.com
Hi Donald,
 
I have created a patch for CAMEL-3195(new feature). Can you have a look at it? 
Your comments/Suggestions are welcome.
 
https://issues.apache.org/activemq/browse/CAMEL-3195
 
Thanks: _Josh
----
Donald Whytock <dwhytock at gmail.com>   Mon, Oct 25, 2010 at 10:08 PM
To: Chandra Prakash Joshi <chandraprakashjoshi at gmail.com>
Hi Josh,

I saw your comment on the JIRA, and it looked like exactly what I'd
hoped for.  I'm a little snowed under at the moment, but I'll probably
be trying it out this week.

I haven't looked at the component code in detail...Does the XMPP
connection amount to a singleton, with endpoints actually acting as
filters?  As in, if I were to define one endpoint to listen for
presence packets and another to accept incoming chat messages, is that
a single socket connection?

Don

----
chandraprakashjoshi at gmail.com <chandraprakashjoshi at gmail.com>      Tue, 
Oct 26, 2010 at 11:50 AM
To: Donald Whytock <dwhytock at gmail.com>
Don,

Thanks for the response and the willingness for trying out the patch. Answer to 
your question below:

"Does the XMPP connection amount to a singleton, with endpoints actually acting 
as filters?"

In code, every "XmppEndpoint" contains a "XMPPConnection" (XmppEndpoint class 
has XMPPConnection as private variable, it's not singleton), so every endpoint 
will open a difference socket connection to XMPP server.

_Josh

----
Donald Whytock <dwhytock at gmail.com>   Tue, Oct 26, 2010 at 8:08 PM
To: chandraprakashjoshi at gmail.com
Is that desirable?  I'm sure it's easier, but would it take more
memory and processing to handle two sockets rather than one?  Far as I
know, an XMPP server will send all packets meant for a user to all
connections the user has open, regardless of what machine they're on.
So if two sockets are open, one for messages and one for presence
packets, each socket will get all messages and presence packets.  So
the filtering has to happen on each socket.  If there was a single
socket, the same filtering could be done on a single message rather
than multiple copies.

Again, though, I'm speaking out of ignorance regarding the code.  Is
it a lot more work to do sockets as singletons under Camel?

Don

----
Chandra Prakash Joshi <chandraprakashjoshi at gmail.com>         Wed, Oct 27, 
2010 at 11:46 AM
To: Donald Whytock <dwhytock at gmail.com>
1. "Is that desirable?"

I think it is. I am relying on that design to solve a problem that I recently 
encountered in my project.
In my project we are supposed to read messages from a JMS queue and publish 
them to ejabberd XMPP server (we will transform the JMS message to PubSub 
packet).

The issue we are facing is that a pubsub packet delivery takes somewhere 
between 250-300 milliseconds (tested it with smack and tsung), so in a serial 
manner we can consume 3-4 message/sec from JMS Provider, but our JMS producer 
will be generating the load of ~50 JMS messages/second (may become high next 
year).

The way we solved it right now is to consume messages in parallel, we have 14 
threads logging in to XMPP server, getting messages from a JMS queue and 
publishing to XMPP topics. and are able to consume ~50 messages/sec (The xmpp 
subscribers receive 50 publishes/sec).

Once this enhancement (CAMEL-3195) is available in camel, we plan to have 14 
routes, each reading from:JMS queue endpoint, convert the message to pubsub 
packet, publish to:xmpp endpoint.


2. Is it a lot more work to do sockets as singletons under Camel?
I suspect it will take long time to make sure we don't break any existing xmpp 
endpoint use-cases out there in the field (I mean there might be people who 
rely on the behavior of "every endpoint is a new connection"). Also, we need to 
change the camel-xmpp design to support "connection per user/resource" rather 
then "connection per endpoint". If not lot, it's fair amount of work.

_Josh

----
Donald Whytock <dwhytock at gmail.com>   Wed, Oct 27, 2010 at 8:21 PM
To: Chandra Prakash Joshi <chandraprakashjoshi at gmail.com>
Interesting.  So while it might be more efficient to consume XMPP on
one thread and delegate after consuming, it's more efficient to
produce XMPP on multiple threads.  And that determination can be made
outside of the endpoint logic.

Simple looks good.

Don

On Wed, Oct 27, 2010 at 2:16 AM, Chandra Prakash Joshi


> Allow camel to send custom xmpp Presence/PubSub packet to a xmpp endpoint
> -------------------------------------------------------------------------
>
>                 Key: CAMEL-3195
>                 URL: https://issues.apache.org/jira/browse/CAMEL-3195
>             Project: Camel
>          Issue Type: New Feature
>          Components: camel-xmpp
>            Reporter: Chandra Prakash Joshi
>             Fix For: 2.8.0
>
>         Attachments: Camel-xmpp-pubsub-presence-v2.patch
>
>
> Claus Ibsen suggested that I should create a ticket for this new feature 
> ([http://stackoverflow.com/questions/3645159/can-apache-camel-send-a-xmpp-presence-pubsub-packet-to-an-xmpp-endpoint])
> I need to receive an update published to a JMS topic, convert it to a XMPP 
> packet (Presence packet or PubSub packet) and route it to an XMPP endpoint.
> I am using ActiveMQ as JMS provider and Apache camel as routing engine. given 
> below is my route in Camel (to make things simple I read from system.in 
> instead of a jms topic):
> {code:java} 
>      from("stream:in?promptMessage=Enter something:").process( new 
> Processor(){
>         public void process(Exchange exchange) throws Exception {
>                 System.out.println("sending presence with message: " + 
> exchange.getIn().getBody().toString());
>                 Presence p = new Presence(Type.available, 
> exchange.getIn().getBody().toString(), 5, Mode.chat);
>                 exchange.getIn().setBody(p);
>             }
>             }).to("xmpp:user1@banl080161?password=pass1");
> {code}
> Idea is that user1@banl080161 should be able to send a custome presence 
> packet having status as given from system.in. I am reading from system.in, 
> making a presence packet, setting this packet in the exchange body and send 
> this presence on behalf of user1@banl080161.
> Problem: nothing gets sent to XMPP server, I use PSI to see packets coming 
> from user1@banl080161, user1@banl080161 comes online for sure but no custom 
> presence message is received.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to