activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sebastian Rodriguez <srodrig...@gmail.com>
Subject Re: How to post message to a certain queue consumer?
Date Wed, 19 May 2010 08:42:30 GMT
Hi alan,
For the Selectors in C#, you can find the following snippet:
<--- start producer side code -->
        /// <summary>
        /// True if the publisher has a selector. False otherwise
        /// </summary>
        /// <value>
        /// <c>true</c> if this instance is selector; otherwise,
<c>false</c>.
        /// </value>
        public bool IsSelector
        {
            get { return m_isSelector; }
            set { m_isSelector = value; }
        }
        private bool m_isSelector = false;

        /// <summary>
        /// Value of the Publisher's selector.
        /// </summary>
        /// <value>The selector.</value>
        public string Selector
        {
            get { return m_selector; }
            set { m_selector = value; }
        }
        private string m_selector = "default";

#region ITopicPublisher Implementation
        /// <summary>
        /// Fires the notification.
        /// </summary>
        /// <param name="body">The body.</param>
        public void FireNotification(object body)
        {
            if (!m_isDisposed)
            {
                try
                {
                    IObjectMessage objMessage = null;
                    objMessage = m_producer.CreateObjectMessage(body);
                    m_producer.DeliveryMode = MsgDeliveryMode.Persistent;
                    objMessage.NMSPriority = m_messagePriority;
                    objMessage.NMSTimeToLive = m_timeToLive;

                    if (IsSelector)
                    {
                        objMessage.Properties.SetString("eventName",
Selector);
                    }

                    m_producer.Send(objMessage);
                }
                catch (Exception ex)
                {
                    Logger.Exception(ex);
                }
            }
            else
            {
                ObjectDisposedException ex = new ObjectDisposedException(
                    this.GetType().FullName);

                Logger.Exception(ex);
                throw ex;
            }
        }
        #endregion
<--- end producer side code -->

<--- start consumer side code -->
        /// <summary>
        /// <see cref="ITopicConnection"/>
        /// </summary>
        public ITopicSubscriber CreateTopicSubscriber(string selector)
        {
            // default selector (condition always true)
            string finalSelector = "2 > 1";

            try
            {
                if (!String.IsNullOrEmpty(selector))
                {
                    finalSelector = string.Format("eventName = '{0}'",
selector);
                }

                IMessageConsumer consumer =
m_session.CreateConsumer(m_topic, finalSelector, false);
                return new ActiveMQSubscriber(consumer);
            }
            catch (Exception ex)
            {
                Logger.Exception(ex);
                throw;
            }
        }

<--- end consumer side code -->

This is just a snippet that is not really intended to work but express the
main idea:
to use the selector you need to set it in the producer side (via the
Message.Properties.SetString), then when you create a consumer, you need to
specify if it has a selector or not (via the CreateConsumer)

I found the tutorials in these page quite useful while learning the basics
of ActiveMQ with C# (via the Apache.NMS.ActiveMQ):
http://remark.wordpress.com/articles/publish-subscribe-with-activemq-and-nms/
The author of this blog have a bunch of ActiveMQ related blog entries that
are worth reading.
Hope this helps you,
Seb

On 19 May 2010 16:22, Cristian Botiza <Cristian.Botiza@endava.com> wrote:

> Session session = ...;
> MessageProducer producer = session.createProducer(destination);
>
> producer.setTimeToLive(timeToLiveInMilliseconds); //use the producer API to
> set TTL
>
> Message message = session.create...Message(...);
>
> producer.send(message);
>
> TTL has nothing to do with message selectors; I found it useful though.
> ________________________________________
> From: alanchb [alanchbmail@gmail.com]
> Sent: 19 May 2010 04:32
> To: users@activemq.apache.org
> Subject: RE: How to post message to a certain queue consumer?
>
> Yes,it works well.
> But I work with Visual C#,the method is a little different from yours.
> Can you give me some guide about TTL you mentioned in early reply?
>
>
> Cristian Botiza wrote:
> >
> > This is not AMQ specific; it's rather JMS API specific - the JavaDoc of
> > interface javax.jms.Message.
> > Did this approach work with P2P and multiple consumers?
> >
> > ________________________________________
> > From: alanchb [alanchbmail@gmail.com]
> > Sent: 18 May 2010 18:08
> > To: users@activemq.apache.org
> > Subject: RE: How to post message to a certain queue consumer?
> >
> > thanks a lot! that's exactly what i need.
> > but if i did not post the question here and get your kind reply,i will
> > never
> > think of  using the method message.setStringProperty to set message
> > selector.how do you konw this?is there any shortcut to learn about
> > ActiveMQ?
> >
> >
> > Cristian Botiza wrote:
> >>
> >> In the producer code, when creating the Message object:
> >>
> >> message.setStringProperty("myFilterProperty", "my consumerID");
> >>
> >> In the consumer (QueueReceiver or Message Driven Bean), define the
> >> message
> >> selector expression (SQL syntax) as myFilterPropert='my consumerID'
> >>
> >> ActiveMQ should dispatch only the messages matching the filter. Others
> >> will stay in the queue, I would also set the TTL in the producer
> >> (optional
> >> though).
> >>
> >> ________________________________________
> >> From: alanchb [alanchbmail@gmail.com]
> >> Sent: 18 May 2010 12:24
> >> To: users@activemq.apache.org
> >> Subject: RE: How to post message to a certain queue consumer?
> >>
> >> Thanks for your reply.
> >>
> >> but how to use message selector to identify a consumer when producer
> send
> >> a
> >> message?
> >>
> >>
> >> Cristian Botiza wrote:
> >>>
> >>> Message selectors?
> >>>
> >>> ________________________________________
> >>> From: alanchb [alanchbmail@gmail.com]
> >>> Sent: 18 May 2010 11:12
> >>> To: users@activemq.apache.org
> >>> Subject: How to post message to a certain queue consumer?
> >>>
> >>> under the P2P mode,if i have sevaral queue consumers,how to make the
> >>> producer
> >>> post message to the consumer he wants?
> >>> --
> >>> View this message in context:
> >>>
> http://old.nabble.com/How-to-post-message-to-a-certain-queue-consumer--tp28592826p28592826.html
> >>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >>>
> >>> The information in this email is confidential and may be legally
> >>> privileged. It is intended solely for the addressee. Any opinions
> >>> expressed are mine and do not necessarily represent the opinions of the
> >>> Company. Emails are susceptible to interference. If you are not the
> >>> intended recipient, any disclosure, copying, distribution or any action
> >>> taken or omitted to be taken in reliance on it, is strictly prohibited
> >>> and
> >>> may be unlawful. If you have received this message in error, do not
> open
> >>> any attachments but please notify the EndavaIT Service Desk on (+44
> >>> (0)870
> >>> 423 0187), and delete this message from your system. The sender accepts
> >>> no
> >>> responsibility for information, errors or omissions in this email, or
> >>> for
> >>> its use or misuse, or for any act committed or omitted in connection
> >>> with
> >>> this communication. If in doubt, please verify the authenticity of the
> >>> contents with the sender. Please rely on your own virus checkers as no
> >>> responsibility is taken by the sender for any damage rising out of any
> >>> bug
> >>> or virus infection.
> >>>
> >>> Endava Limited is a company registered in England under company number
> >>> 5722669 whose registered office is at 125 Old Broad Street, London,
> EC2N
> >>> 1AR, United Kingdom. Endava Limited is the Endava group holding company
> >>> and does not provide any services to clients. Each of Endava Limited
> and
> >>> its subsidiaries is a separate legal entity and has no liability for
> >>> another such entity's acts or omissions. Please refer to the “Legal”
> >>> section on our website for a list of legal entities.
> >>>
> >>>
> >>
> >> --
> >> View this message in context:
> >>
> http://old.nabble.com/How-to-post-message-to-a-certain-queue-consumer--tp28592826p28593473.html
> >> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >>
> >> The information in this email is confidential and may be legally
> >> privileged. It is intended solely for the addressee. Any opinions
> >> expressed are mine and do not necessarily represent the opinions of the
> >> Company. Emails are susceptible to interference. If you are not the
> >> intended recipient, any disclosure, copying, distribution or any action
> >> taken or omitted to be taken in reliance on it, is strictly prohibited
> >> and
> >> may be unlawful. If you have received this message in error, do not open
> >> any attachments but please notify the EndavaIT Service Desk on (+44
> >> (0)870
> >> 423 0187), and delete this message from your system. The sender accepts
> >> no
> >> responsibility for information, errors or omissions in this email, or
> for
> >> its use or misuse, or for any act committed or omitted in connection
> with
> >> this communication. If in doubt, please verify the authenticity of the
> >> contents with the sender. Please rely on your own virus checkers as no
> >> responsibility is taken by the sender for any damage rising out of any
> >> bug
> >> or virus infection.
> >>
> >> Endava Limited is a company registered in England under company number
> >> 5722669 whose registered office is at 125 Old Broad Street, London, EC2N
> >> 1AR, United Kingdom. Endava Limited is the Endava group holding company
> >> and does not provide any services to clients. Each of Endava Limited and
> >> its subsidiaries is a separate legal entity and has no liability for
> >> another such entity's acts or omissions. Please refer to the “Legal”
> >> section on our website for a list of legal entities.
> >>
> >>
> >
> > --
> > View this message in context:
> >
> http://old.nabble.com/How-to-post-message-to-a-certain-queue-consumer--tp28592826p28597231.html
> > Sent from the ActiveMQ - User mailing list archive at Nabble.com.
> >
> > The information in this email is confidential and may be legally
> > privileged. It is intended solely for the addressee. Any opinions
> > expressed are mine and do not necessarily represent the opinions of the
> > Company. Emails are susceptible to interference. If you are not the
> > intended recipient, any disclosure, copying, distribution or any action
> > taken or omitted to be taken in reliance on it, is strictly prohibited
> and
> > may be unlawful. If you have received this message in error, do not open
> > any attachments but please notify the EndavaIT Service Desk on (+44
> (0)870
> > 423 0187), and delete this message from your system. The sender accepts
> no
> > responsibility for information, errors or omissions in this email, or for
> > its use or misuse, or for any act committed or omitted in connection with
> > this communication. If in doubt, please verify the authenticity of the
> > contents with the sender. Please rely on your own virus checkers as no
> > responsibility is taken by the sender for any damage rising out of any
> bug
> > or virus infection.
> >
> > Endava Limited is a company registered in England under company number
> > 5722669 whose registered office is at 125 Old Broad Street, London, EC2N
> > 1AR, United Kingdom. Endava Limited is the Endava group holding company
> > and does not provide any services to clients. Each of Endava Limited and
> > its subsidiaries is a separate legal entity and has no liability for
> > another such entity's acts or omissions. Please refer to the “Legal”
> > section on our website for a list of legal entities.
> >
> >
>
> --
> View this message in context:
> http://old.nabble.com/How-to-post-message-to-a-certain-queue-consumer--tp28592826p28603302.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
> The information in this email is confidential and may be legally
> privileged. It is intended solely for the addressee. Any opinions expressed
> are mine and do not necessarily represent the opinions of the Company.
> Emails are susceptible to interference. If you are not the intended
> recipient, any disclosure, copying, distribution or any action taken or
> omitted to be taken in reliance on it, is strictly prohibited and may be
> unlawful. If you have received this message in error, do not open any
> attachments but please notify the EndavaIT Service Desk on (+44 (0)870 423
> 0187), and delete this message from your system. The sender accepts no
> responsibility for information, errors or omissions in this email, or for
> its use or misuse, or for any act committed or omitted in connection with
> this communication. If in doubt, please verify the authenticity of the
> contents with the sender. Please rely on your own virus checkers as no
> responsibility is taken by the sender for any damage rising out of any bug
> or virus infection.
>
> Endava Limited is a company registered in England under company number
> 5722669 whose registered office is at 125 Old Broad Street, London, EC2N
> 1AR, United Kingdom. Endava Limited is the Endava group holding company and
> does not provide any services to clients. Each of Endava Limited and its
> subsidiaries is a separate legal entity and has no liability for another
> such entity's acts or omissions. Please refer to the “Legal” section on our
> website for a list of legal entities.
>



-- 
Sebastien Rodriguez

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message