Nifi ConsumeJMS happens "Schema failover not found" when subscribing a topic from ActiveMQ - apache-nifi

Environment: Ubuntu 20.04 LTS Server
Nifi version: 1.16.0
I have a ConsumeJMS which will uses a JMSConnectionFactoryProvider to subscribe a topic from an ActiveMQ-artemis.
The JMSConnectionFactoryProvider is configured as below:
The ComsumeJMS processor is configured as below:
When start the ConsumeJMS processor, it appears below error:
The key error message is "Schema failover not found". But if I use GetJmsTopic processor with the same URI, the GetJmsTopic can work.
So, how do I fix the error of "Schema failover not found"?

The failover schema is supported by the OpenWire JMS client shipped with ActiveMQ "Classic", but it's not supported by the core JMS client shipped with ActiveMQ Artemis which you're using (i.e. artemis-jms-client-all-2.19.0.jar). You should use a URL like this instead:
(tcp://192.168.10.65:61616,tcp://192.168.11.65:61616)

Related

Apache Nifi, PublishJMS processor fails while publishing json message to IBM Websphere MQ to overwrite JMS_IBM_* properties

with ref to post : PublishJMS processor fails while publishing json message to IBM Websphere MQ -- it helps.
But i have an another issue while publishing the message to ibm mq queue as is read from another queue. the issue is with JMS_IBM_Encoding value being defaulted to 273 by nifi.
the scenario i was trying to do is, read a msg from one IBM MQ queue and put it on a different queue as is without any modifications using nifi. meaning expecting the same functionality as dump and qload in IBM MQ terms.
Please advise on how to preserve these values as is forwarding with the message.

How to get Kafka brokers in a cluster using Spring Boot Kafka?

I have a Spring Boot (2.3.3) service using spring-kafka to currently access a dedicated Kafka/Zookeeper configuration. I have been using the application.properties setting spring.kafka.bootstrap-servers=localhost:9092 to access my dev/test Apache Kafka service.
However, in production, we have a Cluster of Kafka Brokers (on many servers) configured in Zookeeper, and I have been asked to modify my service to query Zookeeper to get the list of brokers and use that list instead of the bootstrap servers configuration. Reason, our DevOps folks have been known to reconfigure servers/nodes and Kafka brokers.
Basically, I have been asked to make my service agnostic to where the Apache Kafka brokers are running. All my service needs to know is how to get the list of brokers (bootstrap server info including host and port) from Zookeeper.
Is there a way in spring-boot and spring-kafka to retrieve from Zookeeper the broker list and use that broker (aka bootstrap server) list in my service?
Spring delegates to the kafka-clients for all connections; for a long time now, the kafka-clients no longer connect to Zookeeper, only to the brokers themselves.
There is no built-in support in Spring for querying the Zookeeper to determine the broker list.
Furthermore, in a future Kafka version, Zookeeper is going away altogether; see KIP-500.

Amazon MQ transforming AMQP message to JMS

I have a Python and Java Spring application communicating 2 ways. The stack is mostly built on Java/Spring so ActiveMQ and JMS were the logical choices. However, we added a Python application that needed to interact with the rest of the services so I used qpid proton (AMQP library) and added the following configuration inside the ActiveMQ configuration to get it working:
<transportConnectors>
<transportConnector name="openwire" uri="ssl://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqps" uri="amqp+ssl://0.0.0.0:5671?maximumConnections=1000&wireFormat.maxFrameSize=104857600&transport.transformer=jms"/>
</transportConnectors>
which worked flawlessly on ActiveMQ and allowed to send/receive JMS TextMessage with an AMQP client.
Unfortunately, Amazon MQ refused this configuration and returned the following error:
The value 'amqp+ssl' of attribute 'name' on element 'transportConnector' is not valid with respect to its type, 'protocol'. and cvc-enumeration-valid: Value 'amqps' is not facet-valid with respect to enumeration '[openwire]'
AWS markets Amazon MQ as a managed ActiveMQ service but they seem to be lacking in functionalities since the mapping from AMQP to JMS has been available since version 5.8: https://activemq.apache.org/amqp and the Amazon MQ broker that I'm using is at version 5.15.12
I have tried adding the amp;transport.transformer=jms and transport.transformer=jms headers to the query string of the broker's URL, as well as using STOMP as the protocol (since it is a plain-text protocol) in the Python app instead of AMQP but none of these worked.
So, do you know any potential missing configurations or other ways I could send an AMQP message in my Python app and receive a JMS TextMessage in the Java app?
By default in the open source ActiveMQ 5.x code the AMQP transport already defaults to the JMS transformation so unless the Amazon version has altered that you shouldn't need to even set that explicitly if you want JMS transforms of the inbound AMQP messages. If they've altered that then you'd need to contact them to determine how to change that configuration.

How to bridge between IBM MQSeries and ActiveMQ Artemis 7.x?

Has anyone succeeded in creating a bridge between IBM MQSeries (MQS) and ActiveMQ Artemis 7.x (AMQ 7) so that the later can send messages to and receive from the first? Currently I have no problem bridging between MQS 7.5 and AMQ 6.3 by deploying a camel route and MQS libraries on the broker itself. However, the same way doesn't work anymore as each route deployment requires a broker reconfiguration and restart.
Thanks in advance for any feedback.
A few examples ship with ActiveMQ Artemis which might be helpful:
The "inter-broker-bridge" example in the examples/features/sub-modules/ directory. This example demonstrates how to deploy an instance of org.apache.activemq.artemis.jms.bridge.impl.JMSBridgeImpl to the broker using Spring in a web application.
The "camel" example in the examples/features/standard/ directory. This example demonstrates how to deploy a Camel route to the broker using Spring in a web application.
I can't speak to whether or not either of these can be updated at runtime as I've not actually attempted that. Both of these options should be able to move messages in either direction (i.e. from Artemis to MQS or from MQS to Artemis).
Another option would simply be to run Camel standalone and deploy your routes there. This would give you more flexibility as it would allow you to specifically choose the hardware where the routes run as well as how many resources the Camel JVM consumes. Running Camel routes directly on the broker, while convenient, isn't a great fit because the broker is a broker and not an application server.
To be clear, ActiveMQ Artemis and IBM MQSeries are not directly compatible with each other and are not expected to be. This true for most (if not all) JMS broker implementations. The role of components like the ActiveMQ Artemis JMS bridge and integration platforms like Camel are to solve the compatibility problem by using a common API to speak to both brokers - JMS in this case. Any broker which implements JMS can be integrated using these methods.

Weblogic - JMS Server is not displaying any destination

I've a JMS configuration for Weblogic which include: A Server (which is running fine), a JMS Server (addressed by my Server) and a JMS Module. The JMS Server is not displaying an "OK" health state but no exception was found on logs and my JMS module (which contains some queues) is not displaying any JMS destination, also, no errors on logs. Any idea/clue?
Weblogic 12.2.1.0.0 has a bug (Bug 22481818) affecting JMS module. So, in order to fix it you need to apply a patch: 21830665.

Resources