About __Java Message Service__: [https://en.wikipedia.org/wiki/Jakarta_Messaging]\\
\\
__Supported protocol__: AMQPS ([https://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol])\\

''__!!! After 10.4.0_24+:__'' Dependency jar files must be downloaded (unzip) and placed in your CrushFTP ▸ plugins  ▸ lib folder. Restart is required to load the new JMS-related dependency jars. Download: [jms_dependency.zip]\\  
\\
!!1. Solace JMS AMQPS Integration\\
\\
About Solace JMS : [https://docs.solace.com/API/AMQP/Why-AMQP.htm]\\
\\
Get the __AMQPS URL__, __user name__, and __password__ for JMSTask's __JNDI config__ from the __Solace Broker Management__.\\
\\
[JMS (Java Message Service)/jms_amqp.png]\\
\\
!!2. JMSTask configuration:\\

!2.1 JNDI config: Variable replacement is supported.\\
About Java Naming and Directory Interface: [https://en.wikipedia.org/wiki/Java_Naming_and_Directory_Interface]\\
It stores the connection settings and required destinations (Topic and Queue).\\
\\
[JMS (Java Message Service)/jms_jndi_config.png]\\
\\
Configuration example:\\
{{{
# Context Factory
java.naming.factory.initial=org.apache.qpid.jms.jndi.JmsInitialContextFactory

# Secured AMQP Host 
connectionfactory.qpidConnectionfactory=amqps://mr-connection-XXXXd:56XX

#User name and password
username=solace-XXXX
password=rsaXXXXXX
#Topic name
topic.my_topic_name=my_topic_name
queue.my_queue=my_queue
}}}\\
\\
!2.2 Producer Mode:\\
\\
Sends messages to the given destination topic or queue.\\
\\
[JMS (Java Message Service)/JMSTask.png]\\
\\
__1. Destination name__: Name of the __Topic__ or __Queue__ configured on __JNDI config__. Variable replacement is supported ([CrushTaskVariables]).\\
\\
__2. Advanced Options__:\\
\\
__ Persistent:__ Delivery mode Persistent means the message is not lost when a messaging provider goes down for any reason and comes up again.\\
__ Time to live:__ When the message is published, the specified time to live is added to the current time to give the expiration time\\
__ Priority:__ There are 10 priority levels, 0 to 9. As per the JMS standard, a message with priority 0-4 is the normal priority, and 5-9 is considered an expedited priority.\\
\\
__3. Message Type: Custom Message__: Send a custom message to the destination as text or binary. Variable replacement is also supported. You can loop through incoming files and send as many custom messages with file-related pieces of information like name, path, or URL.\\
\\
__4. Message Type: Send files__: It sends the file content in binary mode. Max file size allowed: __10 MB__.\\
\\
!2.3 Consumer Mode:\\
\\
Receive messages from the given destination topic or queue.\\
\\
[JMS (Java Message Service)/jms_consumer_mode.png]\\
__1. Destination name__: Name of the __Topic__ or __Queue__ configured on __JNDI config__. Variable replacement is supported ([CrushTaskVariables]).\\
\\
__2. Message settings__: Limit the number of messages, and control the read timeout of message reading.\\
\\
__3. Store settings__: It saves the message (less than 10MB) as a file to the given location. Provide the file name and make it unique to avoid overwriting. Variable replacement is supported.\\
Message-related variables:\\
{{{
{message_id}, {message_priority}, {message_expiration}, {message_type}, {message_correlation_id}, {message_reply_to} 
}}}
\\