{"id":875,"date":"2021-04-08T15:09:54","date_gmt":"2021-04-08T14:09:54","guid":{"rendered":"https:\/\/marketaylor.synology.me\/?p=875"},"modified":"2021-05-04T20:50:16","modified_gmt":"2021-05-04T19:50:16","slug":"ibm-mq-spring-boot-queue-manager-connections-logging","status":"publish","type":"post","link":"https:\/\/marketaylor.synology.me\/?p=875","title":{"rendered":"What did Spring do to my queue manager"},"content":{"rendered":"\n<p>If you&#8217;ve done any work with the Spring frameworks for Java programs, then you will know that one of the good things about Spring is that it hides a lot of the underlying operations from you. But equally, one of the bad things about Spring is that it hides a lot of the underlying operations from you. I noticed that I was getting several questions about what was happening under the covers from people using the <a href=\"http:\/\/search.maven.org\/#search%7Cga%7C1%7Ca%3A%22mq-jms-spring-boot-starter\" target=\"_blank\" rel=\"noreferrer noopener\">MQ Spring Boot starter<\/a>.  This post shows how you can see what Spring is doing to a queue manager. <\/p>\n\n\n\n<!--more-->\n\n\n\n<p>The MQ Spring Boot starter has two primary concerns.  I wrote a general introduction to the MQ starter in <a href=\"https:\/\/marketaylor.synology.me\/?p=425\" target=\"_blank\" rel=\"noreferrer noopener\">this post<\/a>. But briefly, it first gives a single artifact that can be used in your programs without needing to know any further about dependencies.<\/p>\n\n\n\n<p>It also enables simple configuration of the ConnectionFactory objects used by a JMS program, with sensible default values and non-default values or overrides provided by external configuration files. Just about everything else in the JMS API can be handled by the Spring core classes and methods. But in this starter, we need to get involved in the connection process which is so specific to the MQ provider &#8211; what are the configuration parameters, what are some of the default session options and so on.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Connection Types<\/h3>\n\n\n\n<p>It&#8217;s understanding a bit more about that connection management that I thought I&#8217;d write today. Spring has a number of APIs and mechanisms to configure how connections are made. In the simplest case, you use the <a href=\"https:\/\/docs.spring.io\/spring-framework\/docs\/current\/javadoc-api\/org\/springframework\/jms\/core\/JmsTemplate.html\" target=\"_blank\" rel=\"noreferrer noopener\">JMSTemplate<\/a> class. But that can be very inefficient if you use it frequently without additional options. The JavaDoc for that class even says: <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>&#8220;<strong>NOTE: The <code>ConnectionFactory<\/code> used with this template should return pooled Connections (or a single shared Connection) as well as pooled Sessions and MessageProducers. Otherwise, performance of ad-hoc JMS operations is going to suffer.<\/strong>&#8220;<\/p><\/blockquote>\n\n\n\n<p>But outside of a JEE environment, the MQ JMS classes do not directly provide cached connections. The MQ <a href=\"https:\/\/www.ibm.com\/docs\/en\/ibm-mq\/9.2?topic=pooling-object-in-java-se-environment\" target=\"_blank\" rel=\"noreferrer noopener\">documentation<\/a> suggests that you make use of framework provided mechanisms:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>With Java\u2122 SE (or with another framework such as Spring) the programming models are extremely flexible. Therefore a single pooling strategy does not suit all. You should consider if there is a framework in place that could do any form of pooling, for example, Spring.<\/p><\/blockquote>\n\n\n\n<p>Which is fine, because there are frameworks that can be utilised with the MQ Boot starter. In fact, there are two commonly-used approaches. Historically, people used an external <a href=\"https:\/\/github.com\/messaginghub\/pooled-jms\" target=\"_blank\" rel=\"noreferrer noopener\">connection pooling library<\/a>. At one time, that was the only real option. But Spring has since added its own caching layer, with a <a href=\"https:\/\/docs.spring.io\/spring-framework\/docs\/current\/javadoc-api\/org\/springframework\/jms\/connection\/CachingConnectionFactory.html\" target=\"_blank\" rel=\"noreferrer noopener\">CachingConnectionFactory<\/a> class. There are <a href=\"https:\/\/github.com\/amqphub\/amqp-10-jms-spring-boot\/issues\/6\" target=\"_blank\" rel=\"noreferrer noopener\">different views<\/a> on which is to be preferred, and &#8220;which is best&#8221; may depend on the underlying JMS provider and how the connections are going to be used. In the MQ Boot starter, we don&#8217;t take a prescriptive approach and allow either to be configured.<\/p>\n\n\n\n<p>Though that leads to the question when testing and debugging applications of which type of connection was actually used. Did I correctly configure the JMS pool property? Am I getting too many real MQ connections being made? <\/p>\n\n\n\n<p>The most recent version (2.4.4) of the MQ Spring Boot package tries to help, by providing some trace information using Spring&#8217;s logging mechanisms.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Using Spring logging<\/h3>\n\n\n\n<p>Spring provides integration with various Java logging frameworks. For the most part we don&#8217;t really need to care in this post about how all of that works or where the output goes to. But there are generally two things you need to configure:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Which classes are going to be logged and<\/li><li>What level of logging is applied<\/li><\/ul>\n\n\n\n<p>The default logging level is INFO. But additional detail can typically be obtained by turning on the TRACE level, reporting on aspects that a component developer considers to be useful information.  Setting a global value for the logging level is done for an application with the <code>logging.level.root<\/code> property. But you can limit the output and just select trace reporting from the MQ Spring Boot component by setting the property for just its classes: <code>logging.level.com.ibm.mq.spring.boot=TRACE<\/code><\/p>\n\n\n\n<p>You might want to combine the MQ-specific piece of the logging with the generic Spring JMS framework trace: <code>logging.level.org.springframework.jms=TRACE<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What does the trace show?<\/h3>\n\n\n\n<p>The trace shows the configuration that&#8217;s going to be applied. It also shows which kind of connection is going to be made &#8211; whether that&#8217;s a regular one, or XA &#8211; and how caching or pooling is configured.<\/p>\n\n\n\n<p>Here&#8217;s an example of the output from a simple program when tracing is enabled. With no <a href=\"https:\/\/howtodoinjava.com\/spring-boot2\/logging\/spring-boot-logging-configurations\/\" target=\"_blank\" rel=\"noreferrer noopener\">additional configuration<\/a>, the output goes direct to the screen. This first piece is the &#8220;full&#8221; output line<\/p>\n\n\n\n<pre class=\"wp-block-preformatted small-preformatted-class\">2021-04-07 14:34:08.528 TRACE 76969 --- [ main] i.m.s.b.MQConnectionFactoryConfiguration : Creating single MQConnectionFactory\n2021-04-07 14:34:08.542 TRACE 76969 --- [ main] c.i.m.s.boot.MQConnectionFactoryFactory : constructor\n2021-04-07 14:34:08.542 TRACE 76969 --- [ main] c.i.m.s.boot.MQConnectionFactoryFactory : createConnectionFactory for class MQConnectionFactory<\/pre>\n\n\n\n<p>This is the complete trace but lightly edited for clarity to remove the timestamps and part of the class name:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted small-preformatted-class\">MQConnectionFactoryConfiguration : Creating single MQConnectionFactory\nMQConnectionFactoryFactory : constructor\nMQConnectionFactoryFactory : createConnectionFactory for class MQConnectionFactory\nMQConnectionFactoryFactory : createConnectionFactoryInstance for class MQConnectionFactory\nMQConnectionFactoryFactory : configureConnectionFactory\nMQConfigurationProperties : queueManager : QM1\nMQConfigurationProperties : applicationName : MyAppName\nMQConfigurationProperties : ccdtUrl : null\nMQConfigurationProperties : channel : SYSTEM.DEF.SVRCONN\nMQConfigurationProperties : clientId : null\nMQConfigurationProperties : connName : localhost(1414)\nMQConfigurationProperties : sslCipherSpec : null\nMQConfigurationProperties : sslCipherSuite : null\nMQConfigurationProperties : sslKeyresetcount: -1\nMQConfigurationProperties : sslPeerName : null\nMQConfigurationProperties : tempModel : null\nMQConfigurationProperties : tempQPrefix : null\nMQConfigurationProperties : tempTopicPrefix : null\nMQConfigurationProperties : user : ''\nMQConfigurationProperties : password : Not provided\nMQConfigurationProperties : sslFIPSRequired : false\nMQConfigurationProperties : useIBMCipherMappings : true\nMQConfigurationProperties : userAuthenticationMQCSP: true\nMQConfigurationProperties : Additional Property - WMQ_CLIENT_RECONNECT_OPTIONS : 67108864\nMQConfigurationProperties : Pooling is disabled\nMQConnectionFactoryFactory : Successfully mapped WMQ_CLIENT_RECONNECT_OPTIONS to property name XMSC_WMQ_CLIENT_RECONNECT_OPTIONS\nMQConnectionFactoryFactory : Using setIntProperty with key XMSC_WMQ_CLIENT_RECONNECT_OPTIONS and value 67108864 [0x04000000]<\/pre>\n\n\n\n<p>You can see all the properties that are set on the connection including those those set by the <code>additionalProperties<\/code> property. The <code>password<\/code> line will not show the actual password of course &#8211; but it does show whether or not you have supplied one. <\/p>\n\n\n\n<p>In this case, the first line of the output shows that a single <strong>MQConnectionFactory <\/strong>is created. If the connection were being handled by a transaction coordinator, then the relevant class becomes an <strong>MQXAConnectionFactory<\/strong>. <\/p>\n\n\n\n<p>If I change the properties file to set <code>ibm.mq.pool.enabled=true<\/code> then the trace changes to<\/p>\n\n\n\n<pre class=\"wp-block-preformatted small-preformatted-class\">MQConnectionFactoryConfiguration : Creating pooled MQConnectionFactory<\/pre>\n\n\n\n<p>and the configuration block shows <\/p>\n\n\n\n<pre class=\"wp-block-preformatted small-preformatted-class\">MQConfigurationProperties : Pool blockIfFullTimeout : PT-0.001S\nMQConfigurationProperties : Pool idleTimeout : PT30S\nMQConfigurationProperties : Pool maxConnections : 1\nMQConfigurationProperties : Pool maxSessionsPerConn : 500\nMQConfigurationProperties : Pool timeBetweenExpirationCheck : PT-0.001S<\/pre>\n\n\n\n<p>The &#8220;PT&#8221; is how Duration strings are prefixed &#8230; it looks a bit odd, but you can thank the ISO standards people for that.<\/p>\n\n\n\n<p>You can see a similar and suitable line about the MQCF when the alternative caching mechanism <code>spring.jms.cache.enabled<\/code> is configured. If the Spring Framework JMS trace is also turned on then we get lines later in the output when the connection is actually being used, and messages start to be produced:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted small-preformatted-class\">CachingConnectionFactory : Registering cached JMS Session for mode 0: com.ibm.mq.jms.MQSession@4349754\nJmsTemplate : Executing callback on JMS Session: Cached JMS Session: ibm.mq.jms.MQSession@4349754\nIn destination resolver\nCachingConnectionFactory : Registering cached JMS Session for mode 0: com.ibm.mq.jms.MQSession@421fc931\nCachingConnectionFactory : Registering cached JMS MessageProducer for destination [queue:\/\/\/DEV.QUEUE.1?mdMessageContext=2&amp;mdWriteEnabled=true]: com.ibm.mq.jms.MQQueueSender@5fad41be\nIn convertAndSend completion. MessageType = com.ibm.jms.JMSTextMessage\nJmsTemplate : Sending created message:\nJMSMessage class: jms_text\nJMSType: null\n...<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">How does this relate to MQ Trace and other tools<\/h3>\n\n\n\n<p>The Spring logger does not directly interact with the MQ trace options. With the right configuration options you can get MQ&#8217;s JMS client trace to go to the same file as the Spring logger. But it&#8217;s going to be rare that you really want to look at both &#8211; they are going to have different reasons for existing. <\/p>\n\n\n\n<p>I think the Spring trace is much higher level than the MQ JMS trace, and more useful for most application-level debugging. In fact I really don&#8217;t like using the JMS trace unless I have to: it seems to have so many layers of abstraction\/obstruction in the output because of how the classes are layered and inherit that it can be very hard to interpret without writing additional filtering scripts. It always feels to me very unlike the queue manager traces, which do have lots of layers, but where each layer does something useful rather than just being a wrapper around another object class. So there have been times when I&#8217;ve taken an queue manager trace (which also captures the SVRCONN processes that are handling a JMS client). But rarely, I&#8217;ve had to look at problems that could only really be dealt with by looking at what&#8217;s going on in the client code.<\/p>\n\n\n\n<p>Similar to taking the queue manager and SVRCONN internal traces, MQ&#8217;s Application Activity Trace can give an idea of what the application is doing. Although you have to remember that by the time the queue manager is seeing the API calls, they have been transformed from the JMS API into the MQ API, so you don&#8217;t see a call to create a MessageConsumer; instead you see an MQOPEN and perhaps an MQINQ.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How efficient is the application<\/h3>\n\n\n\n<p>Looking at the MQ Spring Boot trace is mostly capable of giving you an idea of how efficient the connection management is. The other kinds of trace can help determine how efficient other parts of the application are. <\/p>\n\n\n\n<p>For example, using <em>JMSTemplate.sendAndReceive<\/em> looks like a very convenient method to use in a program. It wraps up a number of things in a single call. But when you look at it in more detail (and this is where Activity Trace can be one way to capture the behaviour), you will see that every invocation creates and destroys a new Temporary Dynamic Queue. Which is known to be a bad idea for performance, especially when connecting to a z\/OS queue manager. Instead, you would probably want to switch to creating separate MessageProducers and Consumers that can be reused through the lifetime of the application.<\/p>\n\n\n\n<p>And I used Activity Trace when investigating the looping JMSListener implementation that I wrote about in <a href=\"https:\/\/marketaylor.synology.me\/?p=668\" target=\"_blank\" rel=\"noreferrer noopener\">a previous post<\/a>. Those same events showed that the fix I proposed was actually working.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">While I&#8217;m here &#8230;<\/h3>\n\n\n\n<p>As well as the performance and configuration-related questions, I have seen a number of questions about general Spring JMS application programming. There seem to be quite a few simple examples published, but once you want to do something a bit more complex, then a lot more hunting is needed. The <a href=\"https:\/\/github.com\/ibm-messaging\/mq-mqi-nodejs\" target=\"_blank\" rel=\"noreferrer noopener\">MQ Spring Boot github repository<\/a> now holds a few sample programs to demonstrate some advanced features. But even more examples have been recently added to the <a href=\"https:\/\/github.com\/ibm-messaging\/mq-dev-patterns\" target=\"_blank\" rel=\"noreferrer noopener\">mq-dev-patterns repository<\/a>.<\/p>\n<p class=\"last-modified\" style=\"border:1px solid;padding: 10px;\">This post was last updated on May 4th, 2021 at 08:50 pm<\/p>","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve done any work with the Spring frameworks for Java programs, then you will know that one of the good things about Spring is that it hides a lot of the underlying operations from you. But equally, one of the bad things about Spring is that it hides a lot of the underlying operations &hellip; <a href=\"https:\/\/marketaylor.synology.me\/?p=875\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;What did Spring do to my queue manager&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[35,47,48,20,51,52],"class_list":["post-875","post","type-post","status-publish","format-standard","hentry","category-mq","tag-ibmmq","tag-java","tag-jms","tag-mqseries","tag-spring","tag-spring-boot"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>What did Spring do to my queue manager - Mark Taylor&#039;s Blog<\/title>\n<meta name=\"description\" content=\"The MQ Spring Boot starter integrates with logging mechanisms to show how connections are managed. This feature helps analyse performance concerns.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/marketaylor.synology.me\/?p=875\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"What did Spring do to my queue manager - Mark Taylor&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"The MQ Spring Boot starter integrates with logging mechanisms to show how connections are managed. This feature helps analyse performance concerns.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/marketaylor.synology.me\/?p=875\" \/>\n<meta property=\"og:site_name\" content=\"Mark Taylor&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-08T14:09:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-04T19:50:16+00:00\" \/>\n<meta name=\"author\" content=\"Mark\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@marketaylor\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mark\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875\"},\"author\":{\"name\":\"Mark\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"headline\":\"What did Spring do to my queue manager\",\"datePublished\":\"2021-04-08T14:09:54+00:00\",\"dateModified\":\"2021-05-04T19:50:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875\"},\"wordCount\":1538,\"commentCount\":0,\"keywords\":[\"ibmmq\",\"java\",\"jms\",\"mqseries\",\"spring\",\"spring boot\"],\"articleSection\":[\"IBM MQ\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875\",\"name\":\"What did Spring do to my queue manager - Mark Taylor&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\"},\"datePublished\":\"2021-04-08T14:09:54+00:00\",\"dateModified\":\"2021-05-04T19:50:16+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\"},\"description\":\"The MQ Spring Boot starter integrates with logging mechanisms to show how connections are managed. This feature helps analyse performance concerns.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/?p=875#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/marketaylor.synology.me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"What did Spring do to my queue manager\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#website\",\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/\",\"name\":\"Mark Taylor&#039;s Blog\",\"description\":\"Messaging, Music and Moving Around\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/marketaylor.synology.me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/marketaylor.synology.me\\\/#\\\/schema\\\/person\\\/2d6f4113ff54187023e20c20186bbb3c\",\"name\":\"Mark\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g\",\"caption\":\"Mark\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/marketaylor\"],\"url\":\"https:\\\/\\\/marketaylor.synology.me\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What did Spring do to my queue manager - Mark Taylor&#039;s Blog","description":"The MQ Spring Boot starter integrates with logging mechanisms to show how connections are managed. This feature helps analyse performance concerns.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/marketaylor.synology.me\/?p=875","og_locale":"en_GB","og_type":"article","og_title":"What did Spring do to my queue manager - Mark Taylor&#039;s Blog","og_description":"The MQ Spring Boot starter integrates with logging mechanisms to show how connections are managed. This feature helps analyse performance concerns.","og_url":"https:\/\/marketaylor.synology.me\/?p=875","og_site_name":"Mark Taylor&#039;s Blog","article_published_time":"2021-04-08T14:09:54+00:00","article_modified_time":"2021-05-04T19:50:16+00:00","author":"Mark","twitter_card":"summary_large_image","twitter_creator":"@marketaylor","twitter_misc":{"Written by":"Mark","Estimated reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/marketaylor.synology.me\/?p=875#article","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/?p=875"},"author":{"name":"Mark","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"headline":"What did Spring do to my queue manager","datePublished":"2021-04-08T14:09:54+00:00","dateModified":"2021-05-04T19:50:16+00:00","mainEntityOfPage":{"@id":"https:\/\/marketaylor.synology.me\/?p=875"},"wordCount":1538,"commentCount":0,"keywords":["ibmmq","java","jms","mqseries","spring","spring boot"],"articleSection":["IBM MQ"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/marketaylor.synology.me\/?p=875#respond"]}]},{"@type":"WebPage","@id":"https:\/\/marketaylor.synology.me\/?p=875","url":"https:\/\/marketaylor.synology.me\/?p=875","name":"What did Spring do to my queue manager - Mark Taylor&#039;s Blog","isPartOf":{"@id":"https:\/\/marketaylor.synology.me\/#website"},"datePublished":"2021-04-08T14:09:54+00:00","dateModified":"2021-05-04T19:50:16+00:00","author":{"@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c"},"description":"The MQ Spring Boot starter integrates with logging mechanisms to show how connections are managed. This feature helps analyse performance concerns.","breadcrumb":{"@id":"https:\/\/marketaylor.synology.me\/?p=875#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/marketaylor.synology.me\/?p=875"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/marketaylor.synology.me\/?p=875#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/marketaylor.synology.me\/"},{"@type":"ListItem","position":2,"name":"What did Spring do to my queue manager"}]},{"@type":"WebSite","@id":"https:\/\/marketaylor.synology.me\/#website","url":"https:\/\/marketaylor.synology.me\/","name":"Mark Taylor&#039;s Blog","description":"Messaging, Music and Moving Around","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/marketaylor.synology.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/marketaylor.synology.me\/#\/schema\/person\/2d6f4113ff54187023e20c20186bbb3c","name":"Mark","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9a5ae091c43730194cba7cabb5d65c1dc3f48d05caaddec6ff2319a1ce66376f?s=96&d=mm&r=g","caption":"Mark"},"sameAs":["https:\/\/x.com\/marketaylor"],"url":"https:\/\/marketaylor.synology.me\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=875"}],"version-history":[{"count":19,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/875\/revisions"}],"predecessor-version":[{"id":938,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=\/wp\/v2\/posts\/875\/revisions\/938"}],"wp:attachment":[{"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=875"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marketaylor.synology.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}