You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by "Martin C." <ma...@gmx.at> on 2011/09/22 19:09:18 UTC

Is it possible to generate message-id before sending the JMS message?

Hi,

I'd like to know the message ID of a message I am going to send before
actually sending it. Is this possible?

Reason is that I want to delay sending the JMS messages until my
database transaction has been comitted, but I already want to record
the message IDs as correlation IDs in exactly this database
transaction.

Best regards,
Martin

Re: Is it possible to generate message-id before sending the JMS message?

Posted by Jason Whaley <ja...@gmail.com>.
Why do that instead of having an idempotent consumer taking messages off of the queue?

In the comments from a similar question on stackoverflow.com, Rob Davies suggests also just using a well defined header/property for this purpose:  http://stackoverflow.com/questions/1868349/apache-activemq-5-3-how-to-configure-a-queue-to-reject-duplicate-messages/1980645#1980645


On Sep 24, 2011, at 10:14 PM, kaustubh khasnis wrote:

> Because in that way we can use activeMQ's built in duplicate detection.
> 
> --Kaustubh
> 
> On Fri, Sep 23, 2011 at 7:46 PM, Jason Whaley <ja...@gmail.com> wrote:
> 
>> Agreed with Gary's question here... why not use your database to generate a
>> unique ID for each record and then shove that ID in to a property with an
>> application specific name on the JMS message?
>> 
>> 
>> On Sep 23, 2011, at 8:08 AM, Gary Tully wrote:
>> 
>>> be careful, you need to retain the uniqueness constraints of the
>>> component attributes of a message id. have a peek at how the message
>>> id is generated so that you can understand the intent of each
>>> component.
>>> 
>>> Why do you want to override the messageId?
>>> 
>>> On 23 September 2011 14:19, kaustubh khasnis <ka...@gmail.com>
>> wrote:
>>>> Please correct me if I am wrong, but in same onSend method one could
>>>> override the messageId as well right?
>>>> 
>>>> We also planning to use same, are there any ill-effects of that?
>>>> 
>>>> Thanks and regards
>>>> Kaustubh
>>>> 
>>>> On Thu, Sep 22, 2011 at 11:49 PM, Martin C. <ma...@gmx.at> wrote:
>>>> 
>>>>> Hi,
>>>>> 
>>>>> ok I see, but this is only possible if sending is done directly before
>>>>> committing the database transaction. It wouldn't work so well if
>>>>> sending was done "somewhere" during the process. I had hoped that I
>>>>> could feed something along a UUID as the message ID and it would be
>>>>> used then, but I can see how this would make certain things (like
>>>>> duplicate detection, ...) a lot harder.
>>>>> 
>>>>> Thanks for your answer, anyways!
>>>>> 
>>>>> Best regards,
>>>>> Martin
>>>>> 
>>>>> On Thu, Sep 22, 2011 at 7:36 PM, Gary Tully <ga...@gmail.com>
>> wrote:
>>>>>> you would need to pass use your own message impl that extends
>>>>>> ActiveMQMessage and override
>>>>>> org.apache.activemq.command.ActiveMQMessage#onSend
>>>>>> 
>>>>>> on that callback, you will have the messageId and be able to commit
>>>>>> the db transaction. On return from that method the message will be
>>>>>> sent.
>>>>>> be sure and call super.onSend() though.
>>>>>> 
>>>>>> On 22 September 2011 18:09, Martin C. <ma...@gmx.at> wrote:
>>>>>>> Hi,
>>>>>>> 
>>>>>>> I'd like to know the message ID of a message I am going to send
>> before
>>>>>>> actually sending it. Is this possible?
>>>>>>> 
>>>>>>> Reason is that I want to delay sending the JMS messages until my
>>>>>>> database transaction has been comitted, but I already want to record
>>>>>>> the message IDs as correlation IDs in exactly this database
>>>>>>> transaction.
>>>>>>> 
>>>>>>> Best regards,
>>>>>>> Martin
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> --
>>>>>> http://fusesource.com
>>>>>> http://blog.garytully.com
>>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> http://fusesource.com
>>> http://blog.garytully.com
>> 
>> 


Re: Is it possible to generate message-id before sending the JMS message?

Posted by kaustubh khasnis <ka...@gmail.com>.
Because in that way we can use activeMQ's built in duplicate detection.

--Kaustubh

On Fri, Sep 23, 2011 at 7:46 PM, Jason Whaley <ja...@gmail.com> wrote:

> Agreed with Gary's question here... why not use your database to generate a
> unique ID for each record and then shove that ID in to a property with an
> application specific name on the JMS message?
>
>
> On Sep 23, 2011, at 8:08 AM, Gary Tully wrote:
>
> > be careful, you need to retain the uniqueness constraints of the
> > component attributes of a message id. have a peek at how the message
> > id is generated so that you can understand the intent of each
> > component.
> >
> > Why do you want to override the messageId?
> >
> > On 23 September 2011 14:19, kaustubh khasnis <ka...@gmail.com>
> wrote:
> >> Please correct me if I am wrong, but in same onSend method one could
> >> override the messageId as well right?
> >>
> >> We also planning to use same, are there any ill-effects of that?
> >>
> >> Thanks and regards
> >> Kaustubh
> >>
> >> On Thu, Sep 22, 2011 at 11:49 PM, Martin C. <ma...@gmx.at> wrote:
> >>
> >>> Hi,
> >>>
> >>> ok I see, but this is only possible if sending is done directly before
> >>> committing the database transaction. It wouldn't work so well if
> >>> sending was done "somewhere" during the process. I had hoped that I
> >>> could feed something along a UUID as the message ID and it would be
> >>> used then, but I can see how this would make certain things (like
> >>> duplicate detection, ...) a lot harder.
> >>>
> >>> Thanks for your answer, anyways!
> >>>
> >>> Best regards,
> >>> Martin
> >>>
> >>> On Thu, Sep 22, 2011 at 7:36 PM, Gary Tully <ga...@gmail.com>
> wrote:
> >>>> you would need to pass use your own message impl that extends
> >>>> ActiveMQMessage and override
> >>>> org.apache.activemq.command.ActiveMQMessage#onSend
> >>>>
> >>>> on that callback, you will have the messageId and be able to commit
> >>>> the db transaction. On return from that method the message will be
> >>>> sent.
> >>>> be sure and call super.onSend() though.
> >>>>
> >>>> On 22 September 2011 18:09, Martin C. <ma...@gmx.at> wrote:
> >>>>> Hi,
> >>>>>
> >>>>> I'd like to know the message ID of a message I am going to send
> before
> >>>>> actually sending it. Is this possible?
> >>>>>
> >>>>> Reason is that I want to delay sending the JMS messages until my
> >>>>> database transaction has been comitted, but I already want to record
> >>>>> the message IDs as correlation IDs in exactly this database
> >>>>> transaction.
> >>>>>
> >>>>> Best regards,
> >>>>> Martin
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> http://fusesource.com
> >>>> http://blog.garytully.com
> >>>>
> >>>
> >>
> >
> >
> >
> > --
> > http://fusesource.com
> > http://blog.garytully.com
>
>

Re: Is it possible to generate message-id before sending the JMS message?

Posted by Jason Whaley <ja...@gmail.com>.
Agreed with Gary's question here... why not use your database to generate a unique ID for each record and then shove that ID in to a property with an application specific name on the JMS message?  


On Sep 23, 2011, at 8:08 AM, Gary Tully wrote:

> be careful, you need to retain the uniqueness constraints of the
> component attributes of a message id. have a peek at how the message
> id is generated so that you can understand the intent of each
> component.
> 
> Why do you want to override the messageId?
> 
> On 23 September 2011 14:19, kaustubh khasnis <ka...@gmail.com> wrote:
>> Please correct me if I am wrong, but in same onSend method one could
>> override the messageId as well right?
>> 
>> We also planning to use same, are there any ill-effects of that?
>> 
>> Thanks and regards
>> Kaustubh
>> 
>> On Thu, Sep 22, 2011 at 11:49 PM, Martin C. <ma...@gmx.at> wrote:
>> 
>>> Hi,
>>> 
>>> ok I see, but this is only possible if sending is done directly before
>>> committing the database transaction. It wouldn't work so well if
>>> sending was done "somewhere" during the process. I had hoped that I
>>> could feed something along a UUID as the message ID and it would be
>>> used then, but I can see how this would make certain things (like
>>> duplicate detection, ...) a lot harder.
>>> 
>>> Thanks for your answer, anyways!
>>> 
>>> Best regards,
>>> Martin
>>> 
>>> On Thu, Sep 22, 2011 at 7:36 PM, Gary Tully <ga...@gmail.com> wrote:
>>>> you would need to pass use your own message impl that extends
>>>> ActiveMQMessage and override
>>>> org.apache.activemq.command.ActiveMQMessage#onSend
>>>> 
>>>> on that callback, you will have the messageId and be able to commit
>>>> the db transaction. On return from that method the message will be
>>>> sent.
>>>> be sure and call super.onSend() though.
>>>> 
>>>> On 22 September 2011 18:09, Martin C. <ma...@gmx.at> wrote:
>>>>> Hi,
>>>>> 
>>>>> I'd like to know the message ID of a message I am going to send before
>>>>> actually sending it. Is this possible?
>>>>> 
>>>>> Reason is that I want to delay sending the JMS messages until my
>>>>> database transaction has been comitted, but I already want to record
>>>>> the message IDs as correlation IDs in exactly this database
>>>>> transaction.
>>>>> 
>>>>> Best regards,
>>>>> Martin
>>>>> 
>>>> 
>>>> 
>>>> 
>>>> --
>>>> http://fusesource.com
>>>> http://blog.garytully.com
>>>> 
>>> 
>> 
> 
> 
> 
> -- 
> http://fusesource.com
> http://blog.garytully.com


Re: Is it possible to generate message-id before sending the JMS message?

Posted by Gary Tully <ga...@gmail.com>.
be careful, you need to retain the uniqueness constraints of the
component attributes of a message id. have a peek at how the message
id is generated so that you can understand the intent of each
component.

Why do you want to override the messageId?

On 23 September 2011 14:19, kaustubh khasnis <ka...@gmail.com> wrote:
> Please correct me if I am wrong, but in same onSend method one could
> override the messageId as well right?
>
> We also planning to use same, are there any ill-effects of that?
>
> Thanks and regards
> Kaustubh
>
> On Thu, Sep 22, 2011 at 11:49 PM, Martin C. <ma...@gmx.at> wrote:
>
>> Hi,
>>
>> ok I see, but this is only possible if sending is done directly before
>> committing the database transaction. It wouldn't work so well if
>> sending was done "somewhere" during the process. I had hoped that I
>> could feed something along a UUID as the message ID and it would be
>> used then, but I can see how this would make certain things (like
>> duplicate detection, ...) a lot harder.
>>
>> Thanks for your answer, anyways!
>>
>> Best regards,
>> Martin
>>
>> On Thu, Sep 22, 2011 at 7:36 PM, Gary Tully <ga...@gmail.com> wrote:
>> > you would need to pass use your own message impl that extends
>> > ActiveMQMessage and override
>> > org.apache.activemq.command.ActiveMQMessage#onSend
>> >
>> > on that callback, you will have the messageId and be able to commit
>> > the db transaction. On return from that method the message will be
>> > sent.
>> > be sure and call super.onSend() though.
>> >
>> > On 22 September 2011 18:09, Martin C. <ma...@gmx.at> wrote:
>> >> Hi,
>> >>
>> >> I'd like to know the message ID of a message I am going to send before
>> >> actually sending it. Is this possible?
>> >>
>> >> Reason is that I want to delay sending the JMS messages until my
>> >> database transaction has been comitted, but I already want to record
>> >> the message IDs as correlation IDs in exactly this database
>> >> transaction.
>> >>
>> >> Best regards,
>> >> Martin
>> >>
>> >
>> >
>> >
>> > --
>> > http://fusesource.com
>> > http://blog.garytully.com
>> >
>>
>



-- 
http://fusesource.com
http://blog.garytully.com

Re: Is it possible to generate message-id before sending the JMS message?

Posted by kaustubh khasnis <ka...@gmail.com>.
Please correct me if I am wrong, but in same onSend method one could
override the messageId as well right?

We also planning to use same, are there any ill-effects of that?

Thanks and regards
Kaustubh

On Thu, Sep 22, 2011 at 11:49 PM, Martin C. <ma...@gmx.at> wrote:

> Hi,
>
> ok I see, but this is only possible if sending is done directly before
> committing the database transaction. It wouldn't work so well if
> sending was done "somewhere" during the process. I had hoped that I
> could feed something along a UUID as the message ID and it would be
> used then, but I can see how this would make certain things (like
> duplicate detection, ...) a lot harder.
>
> Thanks for your answer, anyways!
>
> Best regards,
> Martin
>
> On Thu, Sep 22, 2011 at 7:36 PM, Gary Tully <ga...@gmail.com> wrote:
> > you would need to pass use your own message impl that extends
> > ActiveMQMessage and override
> > org.apache.activemq.command.ActiveMQMessage#onSend
> >
> > on that callback, you will have the messageId and be able to commit
> > the db transaction. On return from that method the message will be
> > sent.
> > be sure and call super.onSend() though.
> >
> > On 22 September 2011 18:09, Martin C. <ma...@gmx.at> wrote:
> >> Hi,
> >>
> >> I'd like to know the message ID of a message I am going to send before
> >> actually sending it. Is this possible?
> >>
> >> Reason is that I want to delay sending the JMS messages until my
> >> database transaction has been comitted, but I already want to record
> >> the message IDs as correlation IDs in exactly this database
> >> transaction.
> >>
> >> Best regards,
> >> Martin
> >>
> >
> >
> >
> > --
> > http://fusesource.com
> > http://blog.garytully.com
> >
>

Re: Is it possible to generate message-id before sending the JMS message?

Posted by "Martin C." <ma...@gmx.at>.
Hi,

ok I see, but this is only possible if sending is done directly before
committing the database transaction. It wouldn't work so well if
sending was done "somewhere" during the process. I had hoped that I
could feed something along a UUID as the message ID and it would be
used then, but I can see how this would make certain things (like
duplicate detection, ...) a lot harder.

Thanks for your answer, anyways!

Best regards,
Martin

On Thu, Sep 22, 2011 at 7:36 PM, Gary Tully <ga...@gmail.com> wrote:
> you would need to pass use your own message impl that extends
> ActiveMQMessage and override
> org.apache.activemq.command.ActiveMQMessage#onSend
>
> on that callback, you will have the messageId and be able to commit
> the db transaction. On return from that method the message will be
> sent.
> be sure and call super.onSend() though.
>
> On 22 September 2011 18:09, Martin C. <ma...@gmx.at> wrote:
>> Hi,
>>
>> I'd like to know the message ID of a message I am going to send before
>> actually sending it. Is this possible?
>>
>> Reason is that I want to delay sending the JMS messages until my
>> database transaction has been comitted, but I already want to record
>> the message IDs as correlation IDs in exactly this database
>> transaction.
>>
>> Best regards,
>> Martin
>>
>
>
>
> --
> http://fusesource.com
> http://blog.garytully.com
>

Re: Is it possible to generate message-id before sending the JMS message?

Posted by Gary Tully <ga...@gmail.com>.
you would need to pass use your own message impl that extends
ActiveMQMessage and override
org.apache.activemq.command.ActiveMQMessage#onSend

on that callback, you will have the messageId and be able to commit
the db transaction. On return from that method the message will be
sent.
be sure and call super.onSend() though.

On 22 September 2011 18:09, Martin C. <ma...@gmx.at> wrote:
> Hi,
>
> I'd like to know the message ID of a message I am going to send before
> actually sending it. Is this possible?
>
> Reason is that I want to delay sending the JMS messages until my
> database transaction has been comitted, but I already want to record
> the message IDs as correlation IDs in exactly this database
> transaction.
>
> Best regards,
> Martin
>



-- 
http://fusesource.com
http://blog.garytully.com