At this point I'd recommend managing the JMS connection yourself and disabling any reconnection in the core JMS client. This will eliminate the need to use implementation-specific classes (e.g. SessionFailureListener) and will mean your code remains portable between JMS client & broker implementations.
Justin On Wed, Sep 20, 2023 at 12:27 PM Westpfal, Thomas < thomas.westpf...@saabinc.com> wrote: > Justin, > > Thank you for your response, it was quite helpful. I also want to thank > David for his response, I think he hit the nail on the head, that is > excatly what I'm trying to achieve. Part of the requrements that I am > trying to meet is that I give the user visibility into the connection at > all times. This includes: when a connection attempt is made, when a > connection attempt fails, when a connection attempt is sucessful, and when > a connected connection is broken. I can view some of this information using > the library implementation as is, however I don't believe the library > implementation covers all my bases. I understand the desire for > transparency in the JMS implementaitons, however I think this may be > hidering me in this instance. I know it kind of defeats the purpose of the > transparency aspect of the library, but I am not opposed to putting a > wrapper around it to get the visiblity into to connections that I require. > Do you have any thoughts on how I would be able to achive this sort of > visiblity? > > Regards, > Tom > > > This message is marked Public. > > -----Original Message----- > From: David Sargrad Saab <davidsarg...@hotmail.com> > Sent: Wednesday, September 20, 2023 4:35 AM > To: users@activemq.apache.org > Subject: {EXTERNAL MAIL} Re: Unable to Get Connection Info From > ActiveMQConnectionFactory > > Relative to Justin's question: "Could you provide an explanation of why > you want this information? Perhaps > there is another way to accomplish your overall goal or perhaps there's an > underlying assumption that needs adjustment." > > I think he may be looking for this detail to ensure his application is > dealing with fault monitoring and fault recovery monitoring requirements. > > I've dealt with similar systems where the criticality of the brokering > functionality requires immediate knowledge of failed connections, so that > remedies can be taken. Such systems also benefit from the ability to detect > successful reconnection, and attempts to successfully reconnect. > > ________________________________ > From: Justin Bertram <jbert...@apache.org> > Sent: Tuesday, September 19, 2023 1:59 PM > To: users@activemq.apache.org <users@activemq.apache.org> > Subject: Re: Unable to Get Connection Info From ActiveMQConnectionFactory > > > Is there any way for me to be able to determine how many times the > ActiveMQConnectionFactory attempted a reconnect? > > No. That data is not exposed. > > > Is there a way to see immediately when a connection is broken and not > after reconnection attempts have been made? > > Via JMS, no. However, you could potentially use a SessionFailureListener > [1] on the underlying ClientSession. > > > One solution I thought of was to set reconnection attempts to "0" and > when I receive an exception via the ExceptionListener I manually close the > connection and try to establish a new one. However this doesn't seem like > the right way to do this, and also seems really inefficient. > > This is actually a fairly common pattern as it's the only mechanism built > directly into JMS to deal with asynchronous connection failures. Frameworks > like Spring which integrate with JMS employ patterns like this. > > The reconnection functionality provided by the core JMS client shipped with > ActiveMQ Artemis is designed to be transparent to applications which is the > main reason why there's not much visibility into it. And even if there were > visibility it would require implementation-specific code since this > functionality goes beyond JMS. Using implementation-specific code is > generally discouraged as it nullifies one of the main benefits of using an > API like JMS in the first place - application portability. > > > I feel like I am not quite using the library in the right way. What I'm > looking for is to be able to see when a connection is broken, how many > reconnection attempts have been made, and when I am successfully > reconnected. Any help/guidance would be greatly appreciated. > > Could you provide an explanation of why you want this information? Perhaps > there is another way to accomplish your overall goal or perhaps there's an > underlying assumption that needs adjustment. > > > Justin > > [1] > > https://activemq.apache.org/components/artemis/documentation/javadocs/javadoc-latest/org/apache/activemq/artemis/api/core/client/SessionFailureListener.html > > On Mon, Sep 18, 2023 at 1:32 PM Westpfal, Thomas < > thomas.westpf...@saabinc.com> wrote: > > > Hello, > > > > I am working on a Java application using > > "org.apache.activemq:artemis-jms-client:2.11.0" which connects to > multiple > > Artemis brokers. An important part of my application is the ability to be > > able to monitor the connections with the Artemis brokers. I am having > > trouble determining some of the information I am looking for. > > > > The first thing I am trying to monitor is how many reconnection attempts > > have been made after a connection has been broken. I have set my > > reconnection attempts to "-1" on an ActiveMQConnectionFactory to try to > > reconnect infinitely. The problem that I am having is that the > > ActiveMQConnectionFactory doesn't appear to expose the number of > > reconnection attempts that have been made. Is there any way for me to be > > able to determine how many times the ActiveMQConnectionFactory attempted > a > > reconnect? > > > > The next thing I am trying to monitor is the number of broken connections > > with a given broker. The javax JMS Connection allows you to configure a > > ExceptionListener, however I find that this listener is only triggered > once > > the number of reconnection attempts has been exceeded. Is there a way to > > see immediately when a connection is broken and not after reconnection > > attempts have been made? > > > > One solution I thought of was to set reconnection attempts to "0" and > when > > I receive an exception via the ExceptionListener I manually close the > > connection and try to establish a new one. However this doesn't seem like > > the right way to do this, and also seems really inefficient. > > > > Finally, I am trying to determine if a connection has been reestablished. > > There doesn't appear to be a way to determine if a connection has been > > reestablished other than being able to successfully send or receive a > > message. Is there a way to see this without first sending or receiving a > > message? > > > > I feel like I am not quite using the library in the right way. What I'm > > looking for is to be able to see when a connection is broken, how many > > reconnection attempts have been made, and when I am successfully > > reconnected. Any help/guidance would be greatly appreciated. > > > > Regards, > > Tom > > > > > > This message is marked Public. > > > > This e-mail (including attachments) contains contents owned by Saab Group > > AB and/or its subsidiaries, affiliated companies or customers and covered > > by the laws of Sweden, the US, or Canada (federal, state or provincial). > > The information is intended to be confidential and may be legally > > privileged. If you are not the intended recipient, you are hereby > notified > > that any retention, dissemination, distribution, interception or copying > of > > this communication is strictly prohibited and may subject you to further > > legal action. Reply to the sender if you received this email by accident, > > and then delete the email and any attachments. > > > This e-mail (including attachments) contains contents owned by Saab Group > AB and/or its subsidiaries, affiliated companies or customers and covered > by the laws of Sweden, the US, or Canada (federal, state or provincial). > The information is intended to be confidential and may be legally > privileged. If you are not the intended recipient, you are hereby notified > that any retention, dissemination, distribution, interception or copying of > this communication is strictly prohibited and may subject you to further > legal action. Reply to the sender if you received this email by accident, > and then delete the email and any attachments. >