Upload
others
View
44
Download
0
Embed Size (px)
Citation preview
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
1.12
1.13
1.14
1.15
1.16
1.17
1.18
1.19
1.20
1.21
1.22
1.23
1.24
1.25
1.26
1.27
1.28
1.29
1.30
1.31
1.32
1.33
1.34
1.35
1.36
1.37
TableofContentsIntroduction
LegalNotice
Preface
ProjectInfo
Versions
MessagingConcepts
Architecture
UsingtheServer
Upgrading
AddressModel
ProtocolsandInteroperability
AMQP
MQTT
STOMP
OpenWire
Core
MappingJMSConceptstotheCoreAPI
UsingJMS
TheClientClasspath
Examples
RoutingMessagesWithWildCards
WildcardSyntax
FilterExpressions
Persistence
ConfiguringTransports
ConfigurationReload
DetectingDeadConnections
DetectingSlowConsumers
AvoidingNetworkIsolation
DetectingBrokerIssues(CriticalAnalysis)
ResourceManagerConfiguration
FlowControl
Guaranteesofsendsandcommits
MessageRedeliveryandUndeliveredMessages
MessageExpiry
LargeMessages
Paging
1
1.39
1.40
1.41
1.42
1.43
1.44
1.45
1.46
1.47
1.48
1.49
1.50
1.51
1.52
1.53
1.54
1.55
1.56
1.57
1.58
1.59
1.60
1.60.1
1.60.2
1.61
1.62
1.63
1.64
1.65
1.66
1.67
1.68
1.69
1.70
1.71
1.72
1.73
1.74
1.75
1.38ScheduledMessages
Last-ValueQueues
RingQueues
RetroactiveAddresses
ExclusiveQueues
MessageGrouping
ConsumerPriority
ExtraAcknowledgeModes
Management
ManagementConsole
Metrics
Security
MaskingPasswords
BrokerPlugins
ResourceLimits
TheJMSBridge
ClientReconnectionandSessionReattachment
DivertingandSplittingMessageFlows
CoreBridges
Transformers
DuplicateMessageDetection
Clusters
Federation
AddressFederation
QueueFederation
HighAvailabilityandFailover
GracefulServerShutdown
LibaioNativeLibraries
Threadmanagement
EmbeddedWebServer
Logging
RESTInterface
EmbeddingtheBroker
ApacheKaraf
ApacheTomcat
SpringIntegration
CDIIntegration
InterceptingOperations
DataTools
MavenPlugin
2
1.77
1.78
1.76UnitTesting
TroubleshootingandPerformanceTuning
ConfigurationReference
3
ApacheActiveMQArtemisUserManualTheUsermanualisanindepthmanualonallaspectsofApacheActiveMQArtemis
Introduction
4
LegalNoticeLicensedtotheApacheSoftwareFoundation(ASF)underoneormorecontributorlicenseagreements.SeetheNOTICEfiledistributedwiththisworkforadditionalinformationregardingcopyrightownership.TheASFlicensesthisfiletoYouundertheApacheLicense,Version2.0(the"License");youmaynotusethisfileexceptincompliancewiththeLicense.YoumayobtainacopyoftheLicenseat
http://www.apache.org/licenses/LICENSE-2.0
Unlessrequiredbyapplicablelaworagreedtoinwriting,softwaredistributedundertheLicenseisdistributedonan"ASIS"BASIS,WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.SeetheLicenseforthespecificlanguagegoverningpermissionsandlimitationsundertheLicense.
LegalNotice
5
http://www.apache.org/licenses/LICENSE-2.0
PrefaceWhatisApacheActiveMQArtemis?
ApacheActiveMQArtemisisanopensourceprojecttobuildamulti-protocol,embeddable,veryhighperformance,clustered,asynchronousmessagingsystem.
ApacheActiveMQArtemisisanexampleofMessageOrientedMiddleware(MoM).ForadescriptionofMoMsandothermessagingconceptspleaseseetheMessagingConcepts.
WhyuseApacheActiveMQArtemis?Herearejustafewofthereasons:
100%opensourcesoftware.ApacheActiveMQArtemisislicensedusingtheApacheSoftwareLicensev2.0tominimisebarrierstoadoption.
ApacheActiveMQArtemisisdesignedwithusabilityinmind.
WritteninJava.RunsonanyplatformwithaJava8+runtime,that'severythingfromWindowsdesktopstoIBMmainframes.
Amazingperformance.Ourground-breakinghighperformancejournalprovidespersistentmessagingperformanceatratesnormallyseenfornon-persistentmessaging,ournon-persistentmessagingperformancerockstheboattoo.
Fullfeatureset.Allthefeaturesyou'dexpectinanyseriousmessagingsystem,andothersyouwon'tfindanywhereelse.
Elegant,clean-cutdesignwithminimalthirdpartydependencies.RunActiveMQArtemisstand-alone,runitinintegratedinyourfavouriteJavaEEapplicationserver,orrunitembeddedinsideyourownproduct.It'suptoyou.
Seamlesshighavailability.WeprovideaHAsolutionwithautomaticclientfailoversoyoucanguaranteezeromessagelossorduplicationineventofserverfailure.
Hugelyflexibleclustering.Createclustersofserversthatknowhowtoloadbalancemessages.Linkgeographicallydistributedclustersoverunreliableconnectionstoformaglobalnetwork.Configureroutingofmessagesinahighlyflexibleway.
Preface
6
ProjectInformationTheofficialApacheActiveMQArtemisprojectpageishttp://activemq.apache.org/artemis/.
SoftwareDownload
ThesoftwarecanbedownloadfromtheDownloadpage:http://activemq.apache.org/artemis/download.html
ProjectInformation
Ifyouhaveanyuserquestionspleaseuseouruserforum
Ifyouhavedevelopmentrelatedquestions,pleaseuseourdeveloperforum
PopinandchattousinourIRCchannel
ApacheActiveMQArtemisGitrepositoryishttps://github.com/apache/activemq-artemis
Allreleasetagsareavailablefromhttps://github.com/apache/activemq-artemis/releases
Andmanythankstoallourcontributors,botholdandnewwhohelpedcreateApacheActiveMQArtemis.
ProjectInfo
7
http://activemq.apache.org/artemis/http://activemq.apache.org/artemis/download.htmlhttp://activemq.2283324.n4.nabble.com/ActiveMQ-User-f2341805.htmlhttp://activemq.2283324.n4.nabble.com/ActiveMQ-Dev-f2368404.htmlirc://irc.freenode.net:6667/apache-activemqhttps://github.com/apache/activemq-artemishttps://github.com/apache/activemq-artemis/releases
VersionsThischapterprovidesthefollowinginformationforeachrelease:
Alinktothefullreleasenoteswhichincludesallissuesresolvedintherelease.Abrieflistof"highlights"whenapplicable.Ifnecessary,specificstepsrequiredwhenupgradingfromthepreviousversion.
Note:Iftheupgradespansmultipleversionsthenthestepsfromeachversionneedtobefollowedinorder.Note:FollowthegeneralupgradeprocedureoutlinedintheUpgradingtheBrokerchapterinadditiontoanyversion-specificupgradeinstructionsoutlinedhere.
2.11.0
Fullreleasenotes.
Highlights:
Supportretroactiveaddresses.Supportdownstreamfederatedqueuesandaddresses.MakesecuritymanagerconfigurableviaXML.SupportpluggableSSLTrustManagerFactory.Addpluginsupportforfederatedqueues/addresses.Support com.sun.jndi.ldap.read.timeoutinLDAPLoginModule.
2.10.0
Fullreleasenotes.
Thiswasmainlyabug-fixreleasewithanotabledependencychangeimpactingversionupgrade.
Upgradingfrom2.9.0
DuetotheWildFlydependencyupgradethebrokerstartscripts/configurationneedtobeadjustedafterupgrading.
On*nix
Locatethisstatementin bin/artemis:
WILDFLY_COMMON="$ARTEMIS_HOME/lib/wildfly-common-1.5.1.Final.jar"
Thisneedstobereplacedwiththis:
WILDFLY_COMMON="$ARTEMIS_HOME/lib/wildfly-common-1.5.2.Final.jar"
OnWindows
Locatethispartof JAVA_ARGSin etc/artemis.profile.cmdrespectively bin/artemis-service.xml:
%ARTEMIS_HOME%\lib\wildfly-common-1.5.1.Final.jar
Versions
8
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12346258https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12345602
Thisneedstobereplacedwiththis:
%ARTEMIS_HOME%\lib\wildfly-common-1.5.2.Final.jar
2.9.0
Fullreleasenotes.
Thiswasalightrelease.Itincludedahandfulofbugfixes,afewimprovements,andonemajornewfeature.
Highlights:
Supportexportingmetrics.
2.8.1
Fullreleasenotes.
Thiswasmainlyabug-fixreleasewithanotabledependencychangeimpactingversionupgrade.
Upgradingfrom2.8.0
DuetothedependencyupgrademadeonARTEMIS-2319thebrokerstartscriptsneedtobeadjustedafterupgrading.
On*nix
Locatethis ifstatementin bin/artemis:
if[-z"$LOG_MANAGER"];then
#thisistheonefoundwhentheserverwascreated
LOG_MANAGER="$ARTEMIS_HOME/lib/jboss-logmanager-2.0.3.Final.jar"
fi
Thisneedstobereplacedwiththisblock:
if[-z"$LOG_MANAGER"];then
#thisistheonefoundwhentheserverwascreated
LOG_MANAGER="$ARTEMIS_HOME/lib/jboss-logmanager-2.1.10.Final.jar"
fi
WILDFLY_COMMON=`ls$ARTEMIS_HOME/lib/wildfly-common*jar2>/dev/null`
if[-z"$WILDFLY_COMMON"];then
#thisistheonefoundwhentheserverwascreated
WILDFLY_COMMON="$ARTEMIS_HOME/lib/wildfly-common-1.5.1.Final.jar"
fi
Noticethatthe jboss-logmanagerversionhaschangedandthereisalsoanew wildfly-commonlibrary.
Notmuchfurtherdownthereisthisline:
-Xbootclasspath/a:"$LOG_MANAGER"\
Thislineshouldbechangedtobe:
-Xbootclasspath/a:"$LOG_MANAGER:$WILDFLY_COMMON"\
Versions
9
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12345527https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12345432https://issues.apache.org/jira/browse/ARTEMIS-2319
OnWindows
Locatethispartof JAVA_ARGSin etc/artemis.profile.cmdrespectively bin/artemis-service.xml:
-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final.jar
Thisneedstobereplacedwiththis:
-Xbootclasspath/a:%ARTEMIS_HOME%\lib\jboss-logmanager-2.1.10.Final.jar;%ARTEMIS_HOME%\lib\wildfly-common-1.5.1.
Final.jar
2.8.0
Fullreleasenotes.
Highlights:
SupportActiveMQ5featureJMSXGroupFirstForConsumer.Clarifyhandshaketimeouterrorwithremoteaddress.SupportduplicatedetectionforAMQPmessagesthesameascore.
2.7.0
Fullreleasenotes.
Highlights:
Supportadvanceddestinationoptionslike consumersBeforeDispatchStartsand timeBeforeDispatchStartsfrom5.x.Addsupportfordelaysbeforedeletingaddressesandqueuesvia auto-delete-queues-delayand auto-delete-addresses-delayAddressSettings.SupportloggingHTTPaccess.AddaCLIcommandtopurgeaqueue.SupportuserandrolemanipulationforPropertiesLoginModuleviamanagementinterfaces.Dockerimages.Auditlogging.Implementingconsumerpriority.SupportFQQNforproducers.Trackroutedandunroutedmessagessenttoanaddress.SupportconnectionpoolinginLDAPLoginModule.Supportconfiguringadefaultconsumerwindowsizevia default-consumer-window-sizeAddressSetting.Supportmasking key-store-passwordand trust-store-passwordinmanagement.xml.Support JMSXGroupSeq-1toclose/resetmessagegroupsfrom5.x.AllowconfigurationofRMIregistryport.Supportrouting-typeconfigurationoncorebridge.Moveartemis-nativeasitsownproject,asactivemq-artemis-native.Supportfederatedqueuesandaddresses.
2.6.4Fullreleasenotes.
Versions
10
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12345169https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12342977https://github.com/apache/activemq-artemis/tree/master/artemis-dockerhttps://github.com/apache/activemq-artemis-nativehttps://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12344010
Thiswasmainlyabug-fixreleasewithafewimprovementsacouplenotablenewfeatures:
Highlights:
Addedtheabilitytosetthetextmessagecontentonthe producerCLIcommand.Supportreloadloggingconfigurationatruntime.
2.6.3Fullreleasenotes.
Thiswasmainlyabug-fixreleasewithafewimprovementsbutnosubstantialnewfeatures.
2.6.2
Fullreleasenotes.
Thiswasabug-fixreleasewithnosubstantialnewfeaturesorimprovements.
2.6.1Fullreleasenotes.
Thiswasabug-fixreleasewithnosubstantialnewfeaturesorimprovements.
2.6.0
Fullreleasenotes.
Highlights:
Supportregularexpressionsformatchingclientcertificates.Support SASL_EXTERNALforAMQPclients.Newexamplesshowingvirtualtopicmappingandexclusivequeuefeatures.
2.5.0
Fullreleasenotes.
Highlights:
Exclusiveconsumers.EquivalentActiveMQ5.xVirtualTopicnamingabilities.SSLCertificaterevocationlist.Last-valuequeuesupportforOpenWire.Supportmaskedpasswordsinbootstrap.xmandlogin.configConfigurablebrokerpluginimplementationforloggingvariousbrokerevents(i.e. LoggingActiveMQServerPlugin).OptiontouseOpenSSLproviderforNettyviathe sslProviderURLparameter.Enablesplittingofbroker.xmlintomultiplefiles.Enhancedmessagecountandsizemetricsforqueues.
Upgradingfrom2.4.0
Versions
11
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12343472https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12343404https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12343356https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12342903https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12342127
1. DuetochangesfromARTEMIS-1644any acceptorthatneedstobecompatiblewithHornetQand/orArtemis1.xclientsneedstohave anycastPrefix=jms.queue.;multicastPrefix=jms.topic.inthe acceptorurl.Thisprefixusedtobeconfiguredautomaticallybehindthesceneswhenthebrokerdetectedtheseoldtypesofclients,butthatbrokecertainuse-caseswithnopossiblework-around.SeeARTEMIS-1644formoredetails.
2.4.0
Fullreleasenotes.
Highlights:
JMXconfigurationviaXMLratherthanhavingtousesystempropertiesviacommandlineorstartscript.ConfigurationofmaxframepayloadlengthforSTOMPweb-socket.AbilitytoconfigureHAusingJDBCpersistence.Implementrole-basedaccesscontrolformanagementobjects.
Upgradingfrom2.3.0
1. Create /etc/management.xml.Attheveryleast,thefilemustcontainthis:
ThisconfiguresrolebasedauthorisationforJMX.ReadmoreintheManagementdocumentation.2. Ifconfigured,removetheJolokiawarfilefromthe webelementin /etc/bootstrap.xml:
ThisisnolongerrequiredastheJolokiaRESTinterfaceisnowintegratedintotheconsolewebapplication.
Ifthefollowingisabsentandyoudesiretodeploythewebconsolethenadd:
Note:theJolokiaRESTinterfaceURLwillnowbeat http://:/console/jolokia
2.3.0Fullreleasenotes.
Highlights:
Webadminconsole!CriticalAnalysisanddeadlockdetectiononbrokerSupportNettynativekqueueonMac.Last-valuequeueforAMQP
Upgradingfrom2.2.0
1. Ifyoudesiretodeploythewebconsolethenaddthefollowingtothe webelementin/etc/bootstrap.xml:
Versions
12
https://issues.apache.org/jira/browse/ARTEMIS-1644https://issues.apache.org/jira/browse/ARTEMIS-1644https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12341540https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12341247
2.2.0
Fullreleasenotes.
Highlights:
ScheduledmessageswiththeSTOMPprotocol.SupportforJNDIReferenceFactoryandJNDIStorable.Abilitytodeletequeuesandaddresseswhenbroker.xmlchanges.ClientauthenticationviaKerberosTLSCipherSuites(RFC2712).
2.1.0
Fullreleasenotes.
Highlights:
Brokerpluginsupport.SupportNettynativeepollonLinux.Abilitytoconfigurearbitrarysecurityrolemappings.AMQPperformanceimprovements.
2.0.0
Fullreleasenotes.
Highlights:
Hugeupdateinvolvingasignificantrefactoringoftheaddressingmodelyieldingthefollowingbenefits:SimplerandmoreflexibleXMLconfiguration.Supportforadditionalmessaginguse-cases.EliminatesconfusingJMS-specificqueuenamingconventions(i.e."jms.queue."&"jms.topic."prefixes).
PureencodingofmessagessoprotocolslikeAMQPdon'tneedtoconvertmessagesto"core"formatunlessabsolutelynecessary."MAPPED"journaltypeforincreasedperformanceincertainuse-cases.
1.5.6Fullreleasenotes.
Highlights:
Bugfixes.
1.5.5Fullreleasenotes.
Highlights:
Bugfixes.
Versions
13
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12340541https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12339963https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12338813https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12340547https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12339947
1.5.4
Fullreleasenotes.
Highlights:
SupportOracle12CforJDBCpersistence.Bugfixes.
1.5.3
Fullreleasenotes.
Highlights:
Support"bytenotation"(e.g."K","KB","Gb",etc.)inbrokerXMLconfiguration.CLIcommandtorecalculatedisksynctimes.Bugfixes.
1.5.2
Fullreleasenotes.
Highlights:
SupportforpagingusingJDBC.Bugfixes.
1.5.1Fullreleasenotes.
Highlights:
SupportoutgoingconnectionsforAMQP.Bugfixes.
1.5.0Fullreleasenotes.
Highlights:
AMQPperformanceimprovements.JUnitruleimplementationsomessagingresourceslikebrokerscanbeeasilyconfiguredintests.BasicCDIintegration.Storeuser'spasswordinhashformbydefault.
1.4.0Fullreleasenotes.
Versions
14
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12339158https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12339575https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12338833https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12338661https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12338118https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12336052
Highlights:
"Global"limitfordiskusage.DetectandreloadcertainXMLconfigurationchangesatruntime.MQTTinterceptors.Supportadding/deletingqueuesviaCLI.New"browse"securitypermissionforclientswhoonlywishtolookatmessages.OptiontopopulateJMSXUserID."Dualauthentication"supporttoauthenticateSSL-basedandnon-SSL-basedclientsdifferently.
1.3.0
Fullreleasenotes.
Highlights:
BettersupportofOpenWirefeatures(e.g.reconnect,producerflow-control,optimizedacknowledgements)SSLkeystorereloadatruntime.InitialsupportforJDBCpersistence.Supportscheduledmessagesonlast-valuequeue.
1.2.0
Fullreleasenotes.
Highlights:
ImprovementsaroundperformanceOSGisupport.Supportfunctionalityequivalenttoall5.xJAASloginmodulesincluding:
PropertiesfileLDAPSSLcertificate"Guest"
1.1.0
Fullreleasenotes.
Highlights:
MQTTsupport.TheexamplesnowusetheCLIprogrammaticallytocreate,start,stop,etc.serversreflectingrealcasesusedinproduction.CLIimprovements.Therearenewtoolstocompactthejournalandadditionalimprovementstotheuserexperience.Configurableresourcelimits.Abilitytodisableserver-sidemessageload-balancing.
1.0.0Fullreleasenotes.
Highlights:
Versions
15
https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12328978https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12333274https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12332642&projectId=12315920https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12315920&version=12328953http://mail-archives.apache.org/mod_mbox/activemq-dev/201407.mbox/%3cCAKF+bsovr7Hvn-rMYkb3pF6hoGjx7nuJWzT_Nh8MyC4usRBX9A@mail.gmail.com%3e
Firstreleaseofthedonatedcode-baseasActiveMQArtemis!LotsoffeaturesforparitywithActiveMQ5.xincluding:
OpenWiresupportAMQP1.0supportURLbasedconnectionsAuto-createaddresses/queuesJolokiaintegration
Versions
16
MessagingConceptsApacheActiveMQArtemisisanasynchronousmessagingsystem,anexampleofMessageOrientedMiddleware,we'lljustcallthemmessagingsystemsintheremainderofthisbook.
We'llfirstpresentabriefoverviewofwhatkindofthingsmessagingsystemsdo,wherethey'reusefulandthekindofconceptsyou'llhearaboutinthemessagingworld.
Ifyou'realreadyfamiliarwithwhatamessagingsystemisandwhatit'scapableof,thenyoucanskipthischapter.
GeneralConceptsMessagingsystemsallowyoutolooselycoupleheterogeneoussystemstogether,whilsttypicallyprovidingreliability,transactionsandmanyotherfeatures.
UnlikesystemsbasedonaRemoteProcedureCall(RPC)pattern,messagingsystemsprimarilyuseanasynchronousmessagepassingpatternwithnotightrelationshipbetweenrequestsandresponses.Mostmessagingsystemsalsosupportarequest-responsemodebutthisisnotaprimaryfeatureofmessagingsystems.
Designingsystemstobeasynchronousfromend-to-endallowsyoutoreallytakeadvantageofyourhardwareresources,minimizingtheamountofthreadsblockingonIOoperations,andtouseyournetworkbandwidthtoitsfullcapacity.WithanRPCapproachyouhavetowaitforaresponseforeachrequestyoumakesoarelimitedbythenetworkroundtriptime,orlatencyofyournetwork.Withanasynchronoussystemyoucanpipelineflowsofmessagesindifferentdirections,soarelimitedbythenetworkbandwidthnotthelatency.Thistypicallyallowsyoutocreatemuchhigherperformanceapplications.
Messagingsystemsdecouplethesendersofmessagesfromtheconsumersofmessages.Thesendersandconsumersofmessagesarecompletelyindependentandknownothingofeachother.Thisallowsyoutocreateflexible,looselycoupledsystems.
Often,largeenterprisesuseamessagingsystemtoimplementamessagebuswhichlooselycouplesheterogeneoussystemstogether.MessagebusesoftenformthecoreofanEnterpriseServiceBus.(ESB).Usingamessagebustode-coupledisparatesystemscanallowthesystemtogrowandadaptmoreeasily.Italsoallowsmoreflexibilitytoaddnewsystemsorretireoldonessincetheydon'thavebrittledependenciesoneachother.
Messagingstyles
Messagingsystemsnormallysupporttwomainstylesofasynchronousmessaging:messagequeuemessaging(alsoknownaspoint-to-pointmessaging)andpublishsubscribemessaging.We'llsummarisethembrieflyhere:
Point-to-Point
Withthistypeofmessagingyousendamessagetoaqueue.Themessageisthentypicallypersistedtoprovideaguaranteeofdelivery,thensometimelaterthemessagingsystemdeliversthemessagetoaconsumer.Theconsumerthenprocessesthemessageandwhenitisdone,itacknowledgesthemessage.Oncethemessageisacknowledgeditdisappearsfromthequeueandisnotavailabletobedeliveredagain.Ifthesystemcrashesbeforethemessagingserverreceivesanacknowledgementfromtheconsumer,thenonrecovery,themessagewillbeavailabletobedeliveredtoaconsumeragain.
Withpoint-to-pointmessaging,therecanbemanyconsumersonthequeuebutaparticularmessagewillonlyeverbeconsumedbyamaximumofoneofthem.Senders(alsoknownasproducers)tothequeuearecompletelydecoupledfromreceivers(alsoknownasconsumers)ofthequeue-theydonotknowofeachother'sexistence.
Aclassicexampleofpointtopointmessagingwouldbeanorderqueueinacompany'sbookorderingsystem.Eachorderisrepresentedasamessagewhichissenttotheorderqueue.Let'simaginetherearemanyfrontendorderingsystemswhichsend
MessagingConcepts
17
https://en.wikipedia.org/wiki/Message-oriented_middlewarehttps://en.wikipedia.org/wiki/Remote_procedure_callhttps://en.wikipedia.org/wiki/Enterprise_service_bushttps://en.wikipedia.org/wiki/Message_queuehttps://en.wikipedia.org/wiki/Publish_subscribe
Aclassicexampleofpointtopointmessagingwouldbeanorderqueueinacompany'sbookorderingsystem.Eachorderisrepresentedasamessagewhichissenttotheorderqueue.Let'simaginetherearemanyfrontendorderingsystemswhichsendorderstotheorderqueue.Whenamessagearrivesonthequeueitispersisted-thisensuresthatiftheservercrashestheorderisnotlost.Let'salsoimaginetherearemanyconsumersontheorderqueue-eachrepresentinganinstanceofanorderprocessingcomponent-thesecanbeondifferentphysicalmachinesbutconsumingfromthesamequeue.Themessagingsystemdeliverseachmessagetooneandonlyoneoftheorderingprocessingcomponents.Differentmessagescanbeprocessedbydifferentorderprocessors,butasingleorderisonlyprocessedbyoneorderprocessor-thisensuresordersaren'tprocessedtwice.
Asanorderprocessorreceivesamessage,itfulfillstheorder,sendsorderinformationtothewarehousesystemandthenupdatestheorderdatabasewiththeorderdetails.Onceit'sdonethatitacknowledgesthemessagetotelltheserverthattheorderhasbeenprocessedandcanbeforgottenabout.Oftenthesendtothewarehousesystem,updateindatabaseandacknowledgementwillbecompletedinasingletransactiontoensureACIDproperties.
Publish-Subscribe
Withpublish-subscribemessagingmanysenderscansendmessagestoanentityontheserver,oftencalledatopic(e.g.intheJMSworld).
Therecanbemanysubscriptionsonatopic,asubscriptionisjustanotherwordforaconsumerofatopic.Eachsubscriptionreceivesacopyofeachmessagesenttothetopic.Thisdiffersfromthemessagequeuepatternwhereeachmessageisonlyconsumedbyasingleconsumer.
Subscriptionscanoptionallybedurablewhichmeanstheyretainacopyofeachmessagesenttothetopicuntilthesubscriberconsumesthem-eveniftheservercrashesorisrestartedinbetween.Non-durablesubscriptionsonlylastamaximumofthelifetimeoftheconnectionthatcreatedthem.
Anexampleofpublish-subscribemessagingwouldbeanewsfeed.Asnewsarticlesarecreatedbydifferenteditorsaroundtheworldtheyaresenttoanewsfeedtopic.Therearemanysubscribersaroundtheworldwhoareinterestedinreceivingnewsitems-eachonecreatesasubscriptionandthemessagingsystemensuresthatacopyofeachnewsmessageisdeliveredtoeachsubscription.
DeliveryguaranteesAkeyfeatureofmostmessagingsystemsisreliablemessaging.Withreliablemessagingtheservergivesaguaranteethatthemessagewillbedeliveredonceandonlyoncetoeachconsumerofaqueueoreachdurablesubscriptionofatopic,evenintheeventofsystemfailure.Thisiscrucialformanybusinesses;e.g.youdon'twantyourordersfulfilledmorethanonceoranyofyourorderstobelost.
Inothercasesyoumaynotcareaboutaonceandonlyoncedeliveryguaranteeandarehappytocopewithduplicatedeliveriesorlostmessages-anexampleofthismightbetransientstockpriceupdates-whicharequicklysupersededbythenextupdateonthesamestock.Themessagingsystemallowsyoutoconfigurewhichdeliveryguaranteesyourequire.
Transactions
Messagingsystemstypicallysupportthesendingandacknowledgementofmultiplemessagesinasinglelocaltransaction.ApacheActiveMQArtemisalsosupportsthesendingandacknowledgementofmessageaspartofalargeglobaltransaction-usingtheJavamappingofXA:JTA.
Durability
MessagingConcepts
18
https://en.wikipedia.org/wiki/ACID
Messagesareeitherdurableornondurable.Durablemessageswillbepersistedinpermanentstorageandwillsurviveserverfailureorrestart.Nondurablemessageswillnotsurviveserverfailureorrestart.Examplesofdurablemessagesmightbeordersortrades,wheretheycannotbelost.Anexampleofanondurablemessagemightbeastockpriceupdatewhichistransitoryanddoesn'tneedtosurvivearestart.
MessagingAPIsandprotocols
Howdoclientapplicationsinteractwithmessagingsystemsinordertosendandconsumemessages?
SeveralmessagingsystemsprovidetheirownproprietaryAPIswithwhichtheclientcommunicateswiththemessagingsystem.
Therearealsosomestandardwaysofoperatingwithmessagingsystemsandsomeemergingstandardsinthisspace.
Let'stakeabrieflookatthese:
JavaMessageService(JMS)
JMSispartofOracle'sJavaEEspecification.It'saJavaAPIthatencapsulatesbothmessagequeueandpublish-subscribemessagingpatterns.JMSisalowestcommondenominatorspecification-i.e.itwascreatedtoencapsulatecommonfunctionalityofthealreadyexistingmessagingsystemsthatwereavailableatthetimeofitscreation.
JMSisaverypopularAPIandisimplementedbymostmessagingsystems.JMSisonlyavailabletoclientsrunningJava.
JMSdoesnotdefineastandardwireformat-itonlydefinesaprogrammaticAPIsoJMSclientsandserversfromdifferentvendorscannotdirectlyinteroperatesinceeachwillusethevendor'sowninternalwireprotocol.
ApacheActiveMQArtemisprovidesafullycompliantJMS1.1andJMS2.0clientimplementation.
SystemspecificAPIs
ManysystemsprovidetheirownprogrammaticAPIforwhichtointeractwiththemessagingsystem.Theadvantageofthisitallowsthefullsetofsystemfunctionalitytobeexposedtotheclientapplication.API'slikeJMSarenotnormallyrichenoughtoexposealltheextrafeaturesthatmostmessagingsystemsprovide.
ApacheActiveMQArtemisprovidesitsowncoreclientAPIforclientstouseiftheywishtohaveaccesstofunctionalityoverandabovethataccessibleviatheJMSAPI.
PleaseseeCoreforusingtheCoreAPIwithApacheActiveMQArtemis.
RESTfulAPI
RESTapproachestomessagingareshowingalotinterestrecently.
ItseemsplausiblethatAPIstandardsforcloudcomputingmayconvergeonaRESTstylesetofinterfacesandconsequentlyaRESTmessagingapproachisaverystrongcontenderforbecomingthede-factomethodformessaginginteroperability.
WithaRESTapproachmessagingresourcesaremanipulatedasresourcesdefinedbyaURIandtypicallyusingasimplesetofoperationsonthoseresources,e.g.PUT,POST,GETetc.RESTapproachestomessagingoftenuseHTTPastheirunderlyingprotocol.
TheadvantageofaRESTapproachwithHTTPisinitssimplicityandthefacttheinternetisalreadytunedtodealwithHTTPoptimally.
PleaseseeRestInterfaceforusingApacheActiveMQArtemis'sRESTfulinterface.
AMQP
MessagingConcepts
19
https://en.wikipedia.org/wiki/Java_Message_Servicehttps://en.wikipedia.org/wiki/Representational_State_Transferhttps://en.wikipedia.org/wiki/AMQP
AMQPisaspecificationforinteroperablemessaging.Italsodefinesawireformat,soanyAMQPclientcanworkwithanymessagingsystemthatsupportsAMQP.AMQPclientsareavailableinmanydifferentprogramminglanguages.
ApacheActiveMQArtemisimplementstheAMQP1.0specification.Anyclientthatsupportsthe1.0specificationwillbeabletointeractwithApacheActiveMQArtemis.
PleaseseeAMQPforusingAMQPwithApacheActiveMQArtemis.
MQTT
MQTTisalightweightconnectivityprotocol.Itisdesignedtoruninenvironmentswheredeviceandnetworksareconstrained.OutoftheboxApacheActiveMQArtemissupportsversionMQTT3.1.1.AnyclientsupportingthisversionoftheprotocolwillworkagainstApacheActiveMQArtemis.
PleaseseeMQTTforusingMQTTwithApacheActiveMQArtemis.
STOMP
Stompisaverysimpletextprotocolforinteroperatingwithmessagingsystems.Itdefinesawireformat,sotheoreticallyanyStompclientcanworkwithanymessagingsystemthatsupportsStomp.Stompclientsareavailableinmanydifferentprogramminglanguages.
PleaseseeStompforusingSTOMPwithApacheActiveMQArtemis.
OpenWire
ActiveMQ5.xdefinesitsownwireprotocol:OpenWire.InordertosupportActiveMQ5.xclients,ApacheActiveMQArtemissupportsOpenWire.AnyActiveMQ5.12.xorhighercanbeusedwithApacheActiveMQArtemis.
PleaseseeOpenWireforusingOpenWirewithApacheActiveMQArtemis.
HighAvailability
HighAvailability(HA)meansthatthesystemshouldremainoperationalafterfailureofoneormoreoftheservers.ThedegreeofsupportforHAvariesbetweenvariousmessagingsystems.
ApacheActiveMQArtemisprovidesautomaticfailoverwhereyoursessionsareautomaticallyreconnectedtothebackupserveroneventofliveserverfailure.
FormoreinformationonHA,pleaseseeHighAvailabilityandFailover.
Clusters
Manymessagingsystemsallowyoutocreategroupsofmessagingserverscalledclusters.Clustersallowtheloadofsendingandconsumingmessagestobespreadovermanyservers.Thisallowsyoursystemtoscalehorizontallybyaddingnewserverstothecluster.
Degreesofsupportforclustersvariesbetweenmessagingsystems,withsomesystemshavingfairlybasicclusterswiththeclustermembersbeinghardlyawareofeachother.
ApacheActiveMQArtemisprovidesveryconfigurablestate-of-the-artclusteringmodelwheremessagescanbeintelligentlyloadbalancedbetweentheserversinthecluster,accordingtothenumberofconsumersoneachnode,andwhethertheyarereadyformessages.
MessagingConcepts
20
https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=amqphttps://mqtt.org/https://stomp.github.io/
ApacheActiveMQArtemisalsohastheabilitytoautomaticallyredistributemessagesbetweennodesofaclustertopreventstarvationonanyparticularnode.
Forfulldetailsonclustering,pleaseseeClusters.
Bridgesandrouting
Somemessagingsystemsallowisolatedclustersorsinglenodestobebridgedtogether,typicallyoverunreliableconnectionslikeawideareanetwork(WAN),ortheinternet.
Abridgenormallyconsumesfromaqueueononeserverandforwardsmessagestoanotherqueueonadifferentserver.Bridgescopewithunreliableconnections,automaticallyreconnectingwhentheconnectionsbecomesavailableagain.
ApacheActiveMQArtemisbridgescanbeconfiguredwithfilterexpressionstoonlyforwardcertainmessages,andtransformationcanalsobehookedin.
ApacheActiveMQArtemisalsoallowsroutingbetweenqueuestobeconfiguredinserversideconfiguration.Thisallowscomplexroutingnetworkstobesetupforwardingorcopyingmessagesfromonedestinationtoanother,formingaglobalnetworkofinterconnectedbrokers.
FormoreinformationpleaseseeCoreBridgesandDivertingandSplittingMessageFlows.
MessagingConcepts
21
CoreArchitectureApacheActiveMQArtemiscoreisdesignedsimplyassetofPlainOldJavaObjects(POJOs)-wehopeyoulikeitsclean-cutdesign.
EachApacheActiveMQArtemisserverhasitsownultrahighperformancepersistentjournal,whichitusesformessageandotherpersistence.
Usingahighperformancejournalallowsoutrageouspersistencemessageperformance,somethingnotachievablewhenusingarelationaldatabaseforpersistence(althoughJDBCisstillanoptionifnecessary).
ApacheActiveMQArtemisclients,potentiallyondifferentphysicalmachines,interactwiththeApacheActiveMQArtemisbroker.ApacheActiveMQArtemiscurrentlyshipstwoAPIimplementationsformessagingattheclientside:
1. CoreclientAPI.ThisisasimpleintuitiveJavaAPIthatisalignedwiththeArtemisinternalCore.Allowingmorecontrolofbrokerobjects(e.gdirectcreationofaddressesandqueues).TheCoreAPIalsooffersafullsetofmessagingfunctionalitywithoutsomeofthecomplexitiesofJMS.
2. JMS2.0clientAPI.ThestandardJMSAPIisavailableattheclientside.
ApacheActiveMQArtemisalsoprovidesdifferentprotocolimplementationsontheserversoyoucanuserespectiveclientsfortheseprotocols:
AMQPOpenWireMQTTSTOMPHornetQ(forusewithHornetQclients).Core(ArtemisCOREprotocol)
JMSsemanticsareimplementedbyaJMSfacadelayerontheclientside.
TheApacheActiveMQArtemisbrokerdoesnotspeakJMSandinfactdoesnotknowanythingaboutJMS,itisaprotocolagnosticmessagingserverdesignedtobeusedwithmultipledifferentprotocols.
WhenauserusestheJMSAPIontheclientside,allJMSinteractionsaretranslatedintooperationsontheApacheActiveMQArtemiscoreclientAPIbeforebeingtransferredoverthewireusingthecoreprotocol.
ThebrokeralwaysjustdealswithcoreAPIinteractions.
Aschematicillustratingthisrelationshipisshowninfigure3.1below:
Architecture
22
Figure3.1showstwouserapplicationsinteractingwithanApacheActiveMQArtemisserver.UserApplication1isusingtheJMSAPI,whileUserApplication2isusingthecoreclientAPIdirectly.
YoucanseefromthediagramthattheJMSAPIisimplementedbyathinfacadelayerontheclientside.
Stand-aloneBrokerThenormalstand-alonemessagingbrokerconfigurationcomprisesacoremessagingbrokerandanumberofprotocolmanagersthatprovidesupportforthevariousprotocolmentionedearlier.
Thestand-alonebrokerconfigurationusesAirlineforbootstrappingtheBroker.
Thestand-alonebrokerarchitectureisshowninfigure3.3below:
Architecture
23
https://github.com/airlift/airline
FormoreinformationonserverconfigurationfilesseeServerConfiguration
EmbeddedBroker
ApacheActiveMQArtemiscoreisdesignedasasetofsimplePOJOssoifyouhaveanapplicationthatrequiresmessagingfunctionalityinternallybutyoudon'twanttoexposethatasanApacheActiveMQArtemisbrokeryoucandirectlyinstantiateandembedbrokersinyourownapplication.
ReadmoreaboutembeddingApacheActiveMQArtemis.
IntegratedwithaJavaEEapplicationserverApacheActiveMQArtemisprovidesitsownfullyfunctionalJavaConnectorArchitecture(JCA)adaptorwhichenablesittobeintegratedeasilyintoanyJavaEEcompliantapplicationserverorservletengine.
JavaEEapplicationserversprovideMessageDrivenBeans(MDBs),whichareaspecialtypeofEnterpriseJavaBeans(EJBs)thatcanprocessmessagesfromsourcessuchasJMSsystemsormailsystems.
ProbablythemostcommonuseofanMDBistoconsumemessagesfromaJMSmessagingsystem.
AccordingtotheJavaEEspecification,aJavaEEapplicationserverusesaJCAadaptertointegratewithaJMSmessagingsystemsoitcanconsumemessagesforMDBs.
However,theJCAadapterisnotonlyusedbytheJavaEEapplicationserverforconsumingmessagesviaMDBs,itisalsousedwhensendingmessagetotheJMSmessagingsysteme.g.frominsideanEJBorservlet.
WhenintegratingwithaJMSmessagingsystemfrominsideaJavaEEapplicationserveritisalwaysrecommendedthatthisisdoneviaaJCAadaptor.Infact,communicatingwithaJMSmessagingsystemdirectly,withoutusingJCAwouldbeillegalaccordingtotheJavaEEspecification.
Theapplicationserver'sJCAserviceprovidesextrafunctionalitysuchasconnectionpoolingandautomatictransactionenlistment,whicharedesirablewhenusingmessaging,say,frominsideanEJB.ItispossibletotalktoaJMSmessagingsystemdirectlyfromanEJB,MDBorservletwithoutgoingthroughaJCAadapter,butthisisnotrecommendedsinceyouwillnotbeabletotakeadvantageoftheJCAfeatures,suchascachingofJMSsessions,whichcanresultinpoorperformance.
Architecture
24
Figure3.2belowshowsaJavaEEapplicationserverintegratingwithaApacheActiveMQArtemisserverviatheApacheActiveMQArtemisJCAadaptor.NotethatallcommunicationbetweenEJBsessionsorentitybeansandMessageDrivenbeansgothroughtheadaptorandnotdirectlytoApacheActiveMQArtemis.
ThelargearrowwiththeprohibitedsignshowsanEJBsessionbeantalkingdirectlytotheApacheActiveMQArtemisserver.Thisisnotrecommendedasyou'llmostlikelyendupcreatinganewconnectionandsessioneverytimeyouwanttointeractfromtheEJB,whichisananti-pattern.
Architecture
25
UsingtheServerThischapterwillfamiliariseyouwithhowtousetheApacheActiveMQArtemisserver.
We'llshowwhereitis,howtostartandstopit,andwe'lldescribethedirectorylayoutandwhatallthefilesareandwhattheydo.
FortheremainderofthischapterwhenwetalkabouttheApacheActiveMQArtemisserverwemeantheApacheActiveMQArtemisstandaloneserver,initsdefaultconfigurationwithaJMSServiceenabled.
ThisdocumentwillrefertothefullpathofthedirectorywheretheActiveMQdistributionhasbeenextractedtoas${ARTEMIS_HOME}directory.
Installation
Afterdownloadingthedistribution,thefollowinghighlightssomeimportantfoldersonthedistribution:
|___bin
|
|___examples
||___common
||___features
||___perf
||___protocols
|
|___lib
||___client
|
|___schema
|
|___web
|___api
|___hacking-guide
|___migration-guide
|___user-manual
bin-binariesandscriptsneededtorunActiveMQArtemis.
examples-Allmannerofexamples.Pleaserefertotheexampleschapterfordetailsonhowtorunthem.
lib-jarsandlibrariesneededtorunActiveMQArtemis
schema-XMLSchemasusedtovalidateActiveMQArtemisconfigurationfiles
web-Thefolderwherethewebcontextisloadedwhenthebrokerruns.
api-Theapidocumentationisplacedunderthewebfolder.
user-manual-Theusermanualisplacedunderthewebfolder.
CreatingaBrokerInstance
Abrokerinstanceisthedirectorycontainingalltheconfigurationandruntimedata,suchaslogsanddatafiles,associatedwithabrokerprocess.Itisrecommendedthatyoudonotcreatetheinstancedirectoryunder ${ARTEMIS_HOME}.ThisseparationisencouragedsothatyoucanmoreeasilyupgradewhenthenextversionofActiveMQArtemisisreleased.
OnUnixsystems,itisacommonconventiontostorethiskindofruntimedataunderthe /var/libdirectory.Forexample,tocreateaninstanceat'/var/lib/mybroker',runthefollowingcommandsinyourcommandlineshell:
UsingtheServer
26
cd/var/lib
${ARTEMIS_HOME}/bin/artemiscreatemybroker
Abrokerinstancedirectorywillcontainthefollowingsubdirectories:
bin:holdsexecutionscriptsassociatedwiththisinstance.etc:holdtheinstanceconfigurationfilesdata:holdsthedatafilesusedforstoringpersistentmessageslog:holdsrotatinglogfilestmp:holdstemporaryfilesthataresafetodeletebetweenbrokerruns
Atthispointyoumaywanttoadjustthedefaultconfigurationlocatedinthe etcdirectory.
Options
Thereareseveraloptionsyoucanusewhencreatinganinstance.
Forafulllistofupdatedpropertiesalwaysuse:
$./artemishelpcreate
NAME
artemiscreate-createsanewbrokerinstance
SYNOPSIS
artemiscreate[--addresses][--aio][--allow-anonymous]
[--autocreate][--blocking][--cluster-password]
[--cluster-user][--clustered][--data]
[--default-port][--disable-persistence]
[--encoding][--etc][--failover-on-shutdown][--force]
[--global-max-size][--home][--host]
[--http-host][--http-port]
[--java-options][--mapped][--max-hops]
[--message-load-balancing][--name]
[--nio][--no-amqp-acceptor][--no-autocreate][--no-autotune]
[--no-fsync][--no-hornetq-acceptor][--no-mqtt-acceptor]
[--no-stomp-acceptor][--no-web][--paging][--password]
[--ping][--port-offset][--queues]
[--replicated][--require-login][--role][--shared-store]
[--silent][--slave][--ssl-key]
[--ssl-key-password][--ssl-trust]
[--ssl-trust-password][--use-client-auth]
[--user][--verbose][--]
OPTIONS
--addresses
Commaseparatedlistofaddresses
--aio
Setsthejournalasasyncio.
--allow-anonymous
Enablesanonymousconfigurationonsecurity,oppositeof
--require-login(Default:input)
--autocreate
Autocreateaddresses.(default:true)
--blocking
Blockproducerswhenaddressbecomesfull,oppositeof--paging
(Default:false)
--cluster-password
Theclusterpasswordtouseforclustering.(Default:input)
UsingtheServer
27
--cluster-user
Theclusterusertouseforclustering.(Default:input)
--clustered
Enableclustering
--data
DirectorywhereActiveMQdataarestored.Pathscanbeabsoluteor
relativetoartemis.instancedirectory('data'bydefault)
--default-port
Theportnumbertouseforthemain'artemis'acceptor(Default:
61616)
--disable-persistence
Disablemessagepersistencetothejournal
--encoding
Theencodingthattextfilesshoulduse
--etc
DirectorywhereActiveMQconfigurationislocated.Pathscanbeabsoluteor
relativetoartemis.instancedirectory('etc'bydefault)
--failover-on-shutdown
Validforsharedstore:willshutdowntriggerafailover?(Default:
false)
--force
Overwriteconfigurationatdestinationdirectory
--global-max-size
Maximumamountofmemorywhichmessagedatamayconsume(Default:
Undefined,halfofthesystem'smemory)
--home
DirectorywhereActiveMQArtemisisinstalled
--host
Thehostnameofthebroker(Default:0.0.0.0orinputifclustered)
--http-host
Thehostnametouseforembeddedwebserver(Default:localhost)
--http-port
Theportnumbertouseforembeddedwebserver(Default:8161)
--java-options
Extrajavaoptionstobepassedtotheprofile
--mapped
Setsthejournalasmapped.
--max-hops
Numberofhopsontheclusterconfiguration
--message-load-balancing
Loadbalancingpolicyoncluster.[ON_DEMAND(default)|STRICT|
OFF]
--name
Thenameofthebroker(Default:sameashost)
--nio
Setsthejournalasnio.
--no-amqp-acceptor
DisabletheAMQPspecificacceptor.
UsingtheServer
28
--no-autocreate
DisableAutocreateaddresses.
--no-autotune
Disableautotuningonthejournal.
--no-fsync
Disableusageoffdatasync(channel.force(false)fromjavanio)on
thejournal
--no-hornetq-acceptor
DisabletheHornetQspecificacceptor.
--no-mqtt-acceptor
DisabletheMQTTspecificacceptor.
--no-stomp-acceptor
DisabletheSTOMPspecificacceptor.
--no-web
Removetheweb-serverdefinitionfrombootstrap.xml
--paging
Pagemessagestodiskwhenaddressbecomesfull,oppositeof
--blocking(Default:true)
--password
Theuser'spassword(Default:input)
--ping
Acommaseparatedstringtobepassedontothebrokerconfigas
network-check-list.Thebrokerwillshutdownwhenallthese
addressesareunreachable.
--port-offset
Offsetstheportsofeveryacceptor
--queues
Commaseparatedlistofqueues.
--replicated
Enablebrokerreplication
--require-login
Thiswillconfiguresecuritytorequireuser/password,oppositeof
--allow-anonymous
--role
Thenamefortherolecreated(Default:amq)
--shared-store
Enablebrokersharedstore
--silent
Itwilldisablealltheinputs,anditwouldmakeabestguessfor
anyrequiredinput
--slave
Validforsharedstoreorreplication:thisisaslaveserver?
--ssl-key
Thekeystorepathforembeddedwebserver
--ssl-key-password
Thekeystorepassword
--ssl-trust
Thetruststorepathincaseofclientauthentication
UsingtheServer
29
--ssl-trust-password
Thetruststorepassword
--use-client-auth
Iftheembeddedserverrequiresclientauthentication
--user
Theusername(Default:input)
--verbose
Addsmoreinformationontheexecution
--
Thisoptioncanbeusedtoseparatecommand-lineoptionsfromthe
listofargument,(usefulwhenargumentsmightbemistakenfor
command-lineoptions
Theinstancedirectorytoholdthebroker'sconfigurationanddata.
Pathmustbewritable.
Someofthesepropertiesmaybemandatoryincertainconfigurationsandthesystemmayaskyouforadditionalinput.
./artemiscreate/usr/server
CreatingActiveMQArtemisinstanceat:/user/server
--user:isamandatoryproperty!
Pleaseprovidethedefaultusername:
admin
--password:ismandatorywiththisconfiguration:
Pleaseprovidethedefaultpassword:
--allow-anonymous|--require-login:isamandatoryproperty!
Allowanonymousaccess?,validvaluesareY,N,True,False
y
Autotuningjournal...
done!Yoursystemcanmake0.34writespermillisecond,yourjournal-buffer-timeoutwillbe2956000
Youcannowstartthebrokerbyexecuting:
"/user/server/bin/artemis"run
Oryoucanrunthebrokerinthebackgroundusing:
"/user/server/bin/artemis-service"start
StartingandStoppingaBrokerInstance
Assumingyoucreatedthebrokerinstanceunder /var/lib/mybrokerallyouneedtodostartrunningthebrokerinstanceisexecute:
/var/lib/mybroker/bin/artemisrun
Nowthatthebrokerisrunning,youcanoptionallyrunsomeoftheincludedexamplestoverifythethebrokerisrunningproperly.
TostoptheApacheActiveMQArtemisinstanceyouwillusethesame artemisscript,butwiththe stopargument.Example:
/var/lib/mybroker/bin/artemisstop
UsingtheServer
30
PleasenotethatApacheActiveMQArtemisrequiresaJava7orlaterruntimetorun.
Bydefaultthe etc/bootstrap.xmlconfigurationisused.Theconfigurationcanbechangede.g.byrunning ./artemisrun--xml:path/to/bootstrap.xmloranotherconfigofyourchoosing.
Environmentvariablesareusedtoprovideeaseofchangingports,hostsanddatadirectoriesusedandcanbefoundinetc/artemis.profileonlinuxand etc\artemis.profile.cmdonWindows.
ServerJVMsettingsTherunscriptssetsomeJVMsettingsfortuningthegarbagecollectionpolicyandheapsize.WerecommendusingaparallelgarbagecollectionalgorithmtosmoothoutlatencyandminimiselargeGCpauses.
BydefaultApacheActiveMQArtemisrunsinamaximumof1GiBofRAM.Toincreasethememorysettingschangethe -Xmsand -XmxmemorysettingsasyouwouldforanyJavaprogram.
IfyouwishtoaddanymoreJVMargumentsortunetheexistingones,therunscriptsaretheplacetodoit.
LibraryPathIfyou'reusingtheAsynchronousIOJournalonLinux,youneedtospecify java.library.pathasapropertyonyourJavaoptions.Thisisdoneautomaticallyinthescripts.
Ifyoudon'tspecify java.library.pathatyourJavaoptionsthentheJVMwillusetheenvironmentvariable LD_LIBRARY_PATH.
YouwillneedtomakesurelibaioisinstalledonLinux.Formoreinformationrefertothelibaiochapter.
Systemproperties
ApacheActiveMQArtemiscantakeasystempropertyonthecommandlineforconfiguringlogging.
Formoreinformationonconfiguringlogging,pleaseseethesectiononLogging.
ConfigurationfilesTheconfigurationfileusedtobootstraptheserver(e.g. bootstrap.xmlbydefault)referencesthespecificbrokerconfigurationfiles.
broker.xml.ThisisthemainActiveMQconfigurationfile.Alltheparametersinthisfilearedescribedhere
Itisalsopossibletousesystempropertysubstitutioninalltheconfigurationfiles.byreplacingavaluewiththenameofasystemproperty.Hereisanexampleofthiswithaconnectorconfiguration:
tcp://${activemq.remoting.netty.host:localhost}:${activemq.remoting.netty.port:61616}
Hereyoucanseewehavereplaced2valueswithsystemproperties activemq.remoting.netty.hostandactivemq.remoting.netty.port.Thesevalueswillbereplacedbythevaluefoundinthesystempropertyifthereisone,ifnottheydefaultbacktolocalhostor61616respectively.Itisalsopossibletonotsupplyadefault.i.e.${activemq.remoting.netty.host},howeverthesystempropertymustbesuppliedinthatcase.
Bootstrapconfigurationfile
UsingtheServer
31
Thestand-aloneserverisbasicallyasetofPOJOswhichareinstantiatedbyAirlinecommands.
Thebootstrapfileisverysimple.Let'stakealookatanexample:
server-Instantiatesacoreserverusingtheconfigurationfilefromthe configurationattribute.ThisisthemainbrokerPOJOnecessarytodoalltherealmessagingwork.
jaas-security-ConfiguresJAAS-basedsecurityfortheserver.The domainattributereferstotherelevantloginmoduleentryin login.config.Ifdifferentbehaviorisneededthenacustomsecuritymanagercanbeconfiguredbyreplacingjaas-securitywith security-manager.Seethe"CustomSecurityManager"sectioninthesecuritychapterformoredetails.
web-ConfiguresanembeddedJettyinstancetoservewebapplicationsliketheadminconsole.
Brokerconfigurationfile
TheconfigurationfortheApacheActiveMQArtemiscoreserveriscontainedin broker.xml.ThisiswhattheFileConfigurationbeanusestoconfigurethemessagingserver.
TherearemanyattributeswhichyoucanconfigureApacheActiveMQArtemis.Inmostcasesthedefaultswilldofine,infacteveryattributecanbedefaultedwhichmeansafilewithasingleempty configurationelementisavalidconfigurationfile.Thedifferentconfigurationwillbeexplainedthroughoutthemanualoryoucanrefertotheconfigurationreferencehere.
WindowsServer
OnwindowsyouwillhavetheoptiontorunActiveMQArtemisasaservice.Justusethefollowingcommandtoinstallit:
$./artemis-service.exeinstall
Thecreateprocessshouldgiveyouahintoftheavailablecommandsavailablefortheartemis-service.exe
AddingBootstrapDependencies
Bootstrapdependencieslikelogginghandlersmustbeaccessiblebythelogmanageratboottime.Packagethedependencyinajarandputitonthebootclasspathbeforeoflogmanagerjar.Thiscanbedoneappendingthejaratthevariable JAVA_ARGS,definedin artemis.profile,withtheoption -Xbootclasspath/a.
AddingRuntimeDependencies
UsingtheServer
32
Runtimedependencieslikediverts,transformers,brokerplugins,JDBCdrivers,passworddecoders,etc.mustbeaccessiblebythebrokeratruntime.Packagethedependencyinajar,andputitonthebroker'sclasspath.Thiscanbedonebyplacingthejarfileinthe libdirectoryofthebrokerdistributionitselforinthe libdirectoryofthebrokerinstance.Abrokerinstancedoesnothavea libdirectorybydefaultsoitmayneedtobecreated.Itshouldbeonthe"top"levelwiththe bin, data, log,etc.directories.
UsingtheServer
33
UpgradingtheBrokerApacheActiveMQ5.x(andpreviousversions)isrunnableoutoftheboxbyexecutingthecommand: ./bin/activemqrun.TheActiveMQArtemisbrokerfollowsadifferentparadigmwheretheprojectdistributionservesasthebroker"home"andoneormorebroker"instances"arecreatedwhichreferencethe"home"forresources(e.g.jarfiles)whichcanbesafelysharedbetweenbrokerinstances.Therefore,aninstanceofthebrokermustbecreatedbeforeitcanberun.Thismayseemslikeanoverheadatfirstglance,butitbecomesverypracticalwhenupdatingtoanewArtemisversionforexample.
TocreateanArtemisbrokerinstancenavigateintotheArtemishomefolderandrun: ./bin/artemiscreate/path/to/myBrokerInstanceonthecommandline.
Becauseofthisseparationit'sveryeasytoupgradeArtemisinmostcases.
Note:
It'srecommendedtochooseafolderdifferentthantheonwhereApacheArtemiswasdownloaded.ThisseparationallowsyourunmultiplebrokerinstanceswiththesameArtemis"home"forexample.ItalsosimplifiesupdatingtonewerversionsofArtemis.
GeneralUpgradeProcedureUpgradingmayrequiresomespecificstepsnotedintheversions,butthegeneralprocessisasfollows:
1. Navigatetothe etcfolderofthebrokerinstancethat'sbeingupgraded2. Open artemis.profile( artemis.profile.cmdonWindows).Itcontainsapropertywhichisrelevantfortheupgrade:
ARTEMIS_HOME='/path/to/apache-artemis-version'
IfyourunArtemisasaserviceonwindowsyouhavetodothefollowingadditionalsteps:
1. Navigatetothe binfolderofthebrokerinstancethat'sbeingupgraded2. Open artemis-service.xml.Itcontainsapropertywhichisrelevantfortheupgrade:
The ARTEMIS_HOMEpropertyisusedtolinktheinstancewiththehome.Inmostcasestheinstancecanbeupgradedtoanewerversionsimplybychangingthevalueofthispropertytothelocationofthenewbrokerhome.Pleaserefertotheaforementionedversionsdocumentforadditionalupgradesteps(ifrequired).
Upgrading
34
AddressingModelApacheActiveMQArtemishasauniqueaddressingmodelthatisbothpowerfulandflexibleandthatoffersgreatperformance.Theaddressingmodelcomprisesthreemainconcepts:addresses,queues,androutingtypes.
Address
Anaddressrepresentsamessagingendpoint.Withintheconfiguration,atypicaladdressisgivenauniquename,0ormorequeues,andaroutingtype.
Queue
Aqueueisassociatedwithanaddress.Therecanbemultiplequeuesperaddress.Onceanincomingmessageismatchedtoanaddress,themessagewillbesentontooneormoreofitsqueues,dependingontheroutingtypeconfigured.Queuescanbeconfiguredtobeautomaticallycreatedanddeleted.
RoutingTypes
Aroutingtypedetermineshowmessagesaresenttothequeuesassociatedwithanaddress.AnApacheActiveMQArtemisaddresscanbeconfiguredwithtwodifferentroutingtypes.
Table1.RoutingTypes
Ifyouwantyourmessagesroutedto... Usethisroutingtype...
Asinglequeuewithinthematchingaddress,inapoint-to-pointmanner. Anycast
Everyqueuewithinthematchingaddress,inapublish-subscribemanner. Multicast
Note:Itispossibletodefinemorethanoneroutingtypeperaddress,butthistypicallyresultsinananti-patternandisthereforenotrecommended.Ifanaddressdoesusebothroutingtypes,however,andtheclientdoesnotshowapreferenceforeitherone,thebrokertypicallydefaultstotheanycastroutingtype.
TheoneexceptioniswhentheclientusestheMQTTprotocol.Inthatcase,thedefaultroutingtypeismulticast.
Foradditionaldetailsabouttheseconceptsrefertothecorechapter.
BasicAddressConfiguration
Thefollowingexamplesshowhowtoconfigurebasicpointtopointandpublishsubscribeaddresses.
Point-to-PointMessaging
Point-to-pointmessagingisacommonscenarioinwhichamessagesentbyaproducerhasonlyoneconsumer.AMQPandJMSmessageproducersandconsumerscanmakeuseofpoint-to-pointmessagingqueues,forexample.Defineananycastroutingtypeforanaddresssothatitsqueuesreceivemessagesinapoint-to-pointmanner.
Whenamessageisreceivedonanaddressusinganycast,ApacheActiveMQArtemislocatesthequeueassociatedwiththeaddressandroutesthemessagetoit.Whenconsumersrequesttoconsumefromtheaddress,thebrokerlocatestherelevantqueueandassociatesthisqueuewiththeappropriateconsumers.Ifmultipleconsumersareconnectedtothesamequeue,messagesaredistributedamongsteachconsumerequally,providingtheconsumersareequallyabletohandlethem.
AddressModel
35
Figure1.PointtoPointMessaging
UsingtheAnycastRoutingType
Openthefile /etc/broker.xmlforediting.
Addanaddressconfigurationelementanditsassociatedqueueiftheydonotexistalready.
Note:FornormalPointtoPointsemantics,thequeuenameMUSTmatchtheaddressname.
Publish-SubscribeMessaging
Inapublish-subscribescenario,messagesaresenttoeveryconsumersubscribedtoanaddress.JMStopicsandMQTTsubscriptionsaretwoexamplesofpublish-subscribemessaging.
Toconfigureanaddresswithpublish-subscribesemantics,createanaddresswiththemulticastroutingtype.
Figure2.Publish-Subscribe
UsingtheMulticastRoutingType
AddressModel
36
Openthefile /etc/broker.xmlforediting.
Addanaddressconfigurationelementwithmulticastroutingtype.
Whenclientsconnecttoanaddresswiththemulticastelement,asubscriptionqueuefortheclientwillbeautomaticallycreatedfortheclient.Itisalsopossibletopre-configuresubscriptionqueuesandconnecttothemdirectlyusingthequeue'sFullyQualifiedQueuenames.
Optionallyaddoneormorequeueelementstotheaddressandwrapthemulticastelementaroundthem.Thisstepistypicallynotneededsincethebrokerwillautomaticallycreateaqueueforeachsubscriptionrequestedbyaclient.
Figure3.Point-to-PointwithTwoQueues
Point-to-PointAddressmultipleQueues
Itisactuallypossibletodefinemorethanonequeueonanaddresswithananycastroutingtype.Whenmessagesarereceivedonsuchanaddress,theyarefirstlydistributedevenlyacrossallthedefinedqueues.UsingFullyQualifiedQueuenames,clientsareabletoselectthequeuethattheywouldliketosubscribeto.Shouldmorethanoneconsumerconnectdirectlytoasinglequeue,ApacheActiveMQArtemiswilltakecareofdistributingmessagesbetweenthem,asintheexampleabove.
Figure3.Point-to-PointwithTwoQueues
Note:ThisishowApacheActiveMQArtemishandlesloadbalancingofqueuesacrossmultiplenodesinacluster.ConfiguringaPoint-to-PointAddresswithtwoqueues,openthefile /etc/broker.xmlforediting.
AddanaddressconfigurationwithAnycastroutingtypeelementanditsassociatedqueues.
AddressModel
37
Point-to-PointandPublish-SubscribeAddresses
Itispossibletodefineanaddresswithbothpoint-to-pointandpublish-subscribesemanticsenabled.Whilenottypicallyrecommend,thiscanbeusefulwhenyouwant,forexample,aJMSQueuesayordersandaJMSTopicnamedorders.Thedifferentroutingtypesmaketheaddressesappeartobedistinct.
UsinganexampleofJMSClients,themessagessentbyaJMSmessageproducerwillberoutedusingtheanycastroutingtype.MessagessentbyaJMStopicproducerwillusethemulticastroutingtype.InadditionwhenaJMStopicconsumerattaches,itwillbeattachedtoit’sownsubscriptionqueue.JMSqueueconsumerwillbeattachedtotheanycastqueue.
Figure4.Point-to-PointandPublish-Subscribe
Note:Thebehaviorinthisscenarioisdependentontheprotocolbeingused.ForJMSthereisacleardistinctionbetweentopicandqueueproducersandconsumers,whichmakethelogicstraightforward.OtherprotocolslikeAMQPdonotmakethisdistinction.AmessagebeingsentviaAMQPwillberoutedbybothanycastandmulticastandconsumerswilldefaulttoanycast.Formoreinformation,pleasecheckthebehaviorofeachprotocolinthesectionsonprotocols.
TheXMLsnippetbelowisanexampleofwhattheconfigurationforanaddressusingbothanycastandmulticastwouldlooklikein /etc/broker.xml.Notethatsubscriptionqueuesaretypicallycreatedondemand,sothereisnoneedtolistspecificqueueelementsinsidethemulticastroutingtype.
Howtofiltermessages
ApacheActiveMQArtemissupportstheabilitytofiltermessagesusingApacheArtemisFilterExpressions.
Filterscanbeappliedintwoplaces,onaqueueandonaconsumer.
QueueFilter
AddressModel
38
Whenafilterisappliedtoaqueue,messagesarefilteredbeforetheyaresenttothequeue.Toaddaqueuefilterusethefilterelementwhenconfiguringaqueue.Openup /etc/broker.xmlandaddanaddresswithaqueue,usingthefilterelementtoconfigureafilteronthisqueue.
Thefilterdefinedaboveensuresthatonlymessageswithanattribute "color='red'"issenttothisqueue.
ConsumerFilters
ConsumerfiltersareappliedaftermessageshavereachedaqueueandaredefinedusingtheappropriateclientAPIs.ThefollowingJMSexampleshowshowconsumerfilterswork.
1. Defineanaddresswithasinglequeue,withnofilterapplied.
...
//Sendsomemessages
for(inti=0;i<3;i++){
TextMessageredMessage=senderSession.createTextMessage("Red");
redMessage.setStringProperty("color","red");
producer.send(redMessage)
TextMessagegreenMessage=senderSession.createTextMessage("Green");
greenMessage.setStringProperty("color","green");
producer.send(greenMessage)
}
Atthispointthequeuewouldhave6messages:red,green,red,green,red,green
MessageConsumerredConsumer=redSession.createConsumer(queue,"color='red'");
TheredConsumerhasafilterthatonlymatches"red"messages.TheredConsumerwillreceive3messages.
red,red,red
Theresultingqueuewouldnowbe
green,green,green
AutomaticAddress/QueueManagement
AddressModel
39
YoucanconfigureApacheActiveMQArtemistoautomaticallycreateaddressesandqueues,andthendeletethemwhentheyarenolongerinuse.Thissavesyoufromhavingtopreconfigureeachaddressandqueuebeforeaclientcanconnecttoit.Automaticcreationanddeletionisconfiguredonaperaddressbasisandiscontrolledbyfollowing:
Parameter Description
auto-create-addresses
Whensettotrue,thebrokerwillcreatetheaddressrequestedbytheclientifitdoesnotexistalready.Thedefaultis true.
auto-delete-addresses
Whensettotrue,thebrokerwillbedeleteanyauto-createdadddressonceallofit’squeueshavebeendeleted.Thedefaultis true
default-address-routing-type
Theroutingtypetouseiftheclientdoesnotspecifyone.Possiblevaluesare MULTICASTandANYCAST.Seeearlierinthischapterformoreinformationaboutroutingtypes.ThedefaultvalueisMULTICAST.
AutoAddressCreation
Editthefile /etc/broker.xmlandaddthe auto-create-addresseselementtothe address-settingyouwantthebrokertoautomaticallycreate.
(Optional)Addthe address-settingifitdoesnotexist.Usethematchparameterandthewildcardsyntaxtomatchmorethanonespecificaddress.
Set auto-create-addressesto true
(Optional)Assign MULTICASTor ANYCASTasthedefaultroutingtypefortheaddress.
Theexamplebelowconfiguresan address-settingtobeautomaticallycreatedbythebroker.ThedefaultroutingtypetobeusedifnotspecifiedbytheclientisMULTICAST.Notethatwildcardsyntaxisused.Anyaddressstartingwith/news/politics/willbeautomaticallycreatedbythebroker.
true
MULTICAST
AutoAddressDeletion
Editthefile /etc/broker.xmlandaddthe auto-delete-addresseselementtothe address-settingyouwantthebrokertoautomaticallycreate.
(Optional)Addthe address-settingifitdoesnotexist.Usethematchparameterandthewildcardsyntaxtomatchmorethanonespecificaddress.
Set auto-delete-addressesto true
Theexamplebelowconfiguresan address-settingtobeautomaticallydeletedbythebroker.Notethatwildcardsyntaxisused.Anyaddressrequestbytheclientthatstartswith /news/politics/isconfiguredtobeautomaticallydeletedbythebroker.
true
MULTICAST
"FullyQualified"QueueNames
AddressModel
40
Internallythebrokermapsaclient’srequestforanaddresstospecificqueues.Thebrokerdecidesonbehalfoftheclientwhichqueuestosendmessagestoorfromwhichqueuetoreceivemessages.However,moreadvancedusecasesmightrequirethattheclientspecifyaqueuedirectly.Inthesesituationstheclientusesafullyqualifiedqueuename,byspecifyingboththeaddressnameandthequeuename,separatedbya::.
CurrentlyArtemissupportsfullyqualifiedqueuenamesonCore,AMQP,JMS,OpenWire,MQTTandSTOMPprotocolsforreceivingmessagesonly.
SpecifyingaFullyQualifiedQueueName
Inthisexample,theaddressfooisconfiguredwithtwoqueuesq1,q2asshownintheconfigurationbelow.
Intheclientcode,useboththeaddressnameandthequeuenamewhenrequestingaconnectionfromthebroker.Remembertousetwocolons, ::,toseparatethenames,asintheexampleJavacodebelow.
StringFQQN="foo::q1";
Queueq1session.createQueue(FQQN);
MessageConsumerconsumer=session.createConsumer(q1);
UsingPrefixestoDetermineRoutingType
Normally,ifthebrokerreceivesamessagesenttoaparticularaddress,thathasboth ANYCASTand MULTICASTroutingtypesenable,itwillrouteacopyofthemessagetooneofthe ANYCASTqueuesandtoallofthe MULTICASTqueues.
However,clientscanspecifyaspecialprefixwhenconnectingtoanaddresstoindicatewhichkindofroutingtypetouse.TheprefixesarecustomvaluesthataredesignatedusingtheanycastPrefixandmulticastPrefixparameterswithintheURLofanacceptor.
ConfiguringanAnycastPrefix
In /etc/broker.xml,addthe anycastPrefixtotheURLofthedesiredacceptor.Intheexamplebelow,theacceptorisconfiguredtouse anycast://forthe anycastPrefix.Clientcodecanspecify anycast://foo/iftheclientneedstosendamessagetoonlyoneofthe ANYCASTqueues.
tcp://0.0.0.0:61616?protocols=AMQP;anycastPrefix=anycast://
ConfiguringaMulticastPrefix
In /etc/broker.xml,addthe multicastPrefixtotheURLofthedesiredacceptor.Intheexamplebelow,theacceptorisconfiguredtouse multicast://forthe multicastPrefix.Clientcodecanspecify multicast://foo/iftheclientneedstosendamessagetoonlyoneofthe MULTICASTqueues.
tcp://0.0.0.0:61616?protocols=AMQP;multicastPrefix=multicast://
AddressModel
41
AdvancedAddressConfiguration
StaticSubscriptionQueues
Inmostcasesit’snotnecessarytostaticallyconfiguresubscriptionqueues.Therelevantprotocolmanagerstakecareofdynamicallycreatingsubscriptionqueueswhenclientsrequesttosubscribetoanaddress.Thetypeofsubscriptionqueuecreateddependsonwhatpropertiestheclientrequest.Forexample,durable,non-shared,sharedetc.Protocolmanagersusespecialqueuenamingconventionstoidentifywhichqueuesbelongtowhichconsumersandusersneednotworryaboutthedetails.
However,therearescenarioswhereausermaywanttousebrokersideconfigurationtostaticallyconfigureasubscriptionandlaterconnecttothatqueuedirectlyusingaFullyQualifiedQueuename.Theexamplesbelowshowhowtousebrokersideconfigurationtostaticallyconfigureaqueuewithpublishsubscribebehaviorforshared,non-shared,durableandnon-durablesubscriptionbehavior.
Shared,DurableSubscriptionQueueusingmax-consumers
Thedefaultbehaviorforqueuesistonotlimitthenumberconnectedqueueconsumers.Themax-consumersparameterofthequeueelementcanbeusedtolimitthenumberofconnectedconsumersallowedatanyonetime.
Openthefile /etc/broker.xmlforediting.
true
Non-shared,DurableSubscriptionQueue
Thebrokercanbeconfiguredtopreventmorethanoneconsumerfromconnectingtoaqueueatanyonetime.Thesubscriptionstoqueuesconfiguredthiswayaretherefore"non-shared".Todothissimplysetthemax-consumersparameterto 1:
true
Non-durableSubscriptionQueue
Non-durablesubscriptionsareagainusuallymanagedbytherelevantprotocolmanager,bycreatinganddeletingtemporaryqueues.
Ifauserrequirestopre-createaqueuethatbehaveslikeanon-durablesubscriptionqueuethepurge-on-no-consumersflagcanbeenabledonthequeue.Whenpurge-on-no-consumersissettotrue.Thequeuewillnotstartreceivingmessagesuntilaconsumerisattached.Whenthelastconsumerisdetachedfromthequeue.Thequeueispurged(itsmessagesareremoved)and
AddressModel
42
willnotreceiveanymoremessagesuntilanewconsumerisattached.
Openthefile /etc/broker.xmlforediting.
ExclusiveConsumerQueue
Ifauserrequirestostaticallyconfigureaqueuethatroutesexclusivelytooneactiveconsumertheexclusiveflagcanbeenabledonthequeue.
Whenexclusiveissettotruethequeuewillroutemessagestotheasingleactiveconsumer.Whentheactiveconsumerthatisbeingroutedtoisdetachedfromthequeue,ifanotheractiveconsumerexist,onewillbechosenandroutingwillnowbeexclusivetoit.
SeeExclusiveQueueforfurtherinformation.
Openthefile /etc/broker.xmlforediting.
ProtocolManagersA"protocolmanager"mapsprotocol-specificconceptsdowntothecoreaddressingmodel(usingaddresses,queuesandroutingtypes).Forexample,whenaclientsendsaMQTTsubscriptionpacketwiththeaddresses:
/house/room1/lights
/house/room2/lights
TheMQTTprotocolmanagerunderstandsthatthetwoaddressesrequire MULTICASTsemantics.Theprotocolmanagerwillthereforefirstlooktoensurethat MULTICASTisenabledforbothaddresses.Ifnot,itwillattempttodynamicallycreatethem.Ifsuccessful,theprotocolmanagerwillthencreatespecialsubscriptionqueueswithspecialnames,foreachsubscriptionrequestedbytheclient.
Thespecialnameallowstheprotocolmanagertoquicklyidentifytherequiredclientsubscriptionqueuesshouldtheclientdisconnectandreconnectatalaterdate.Ifthesubscriptionistemporarytheprotocolmanagerwilldeletethequeueoncetheclientdisconnects.
Whenaclientrequeststosubscribetoapointtopointaddress.Theprotocolmanagerwilllookupthequeueassociatedwiththepointtopointaddress.Thisqueueshouldhavethesamenameastheaddresss.
Note:Ifthequeueisautocreated,itwillbeautodeletedoncetherearenoconsumersandnomessagesinit.FormoreinformationonautocreateseethenextsectionConfiguringAddressesandQueuesviaAddressSettings
AddressModel
43
ConfiguringAddressesandQueuesviaAddressSettings
Therearesomeattributesthataredefinedagainstanaddresswildcardratherthanaspecificaddress/queue.Hereanexampleofanaddress-settingentrythatwouldbefoundinthe broker.xmlfile.
DLA
ExpiryQueue
123
5000
1.0
0.0
10000
3
100000
-1
20000
PAGE
true
false
false
false
0
-1
0
true
-1
NOTIFY
5
true
true
true
true
true
true
false
0
0
OFF
true
true
0
OFF
200
false
-1
-1
0
Theideawithaddresssettings,isyoucanprovideablockofsettingswhichwillbeappliedagainstanyaddressesthatmatchthestringinthe matchattribute.Intheaboveexamplethesettingswouldonlybeappliedtotheaddress"order.foo"addressbutyoucanalsousewildcardstoapplysettings.
Forexample,ifyouusedthe matchstring queue.#thesettingswouldbeappliedtoalladdresseswhichstartwith queue.
Themeaningofthespecificsettingsareexplainedfullythroughouttheusermanual,howeverhereisabriefdescriptionwithalinktotheappropriatechapterifavailable.
AddressModel
44
dead-letter-addressistheaddresstowhichmessagesaresentwhentheyexceed max-delivery-attempts.Ifnoaddressisdefinedherethensuchmessageswillsimplybediscarded.Readmoreaboutundeliveredmessages.
expiry-addressdefineswheretosendamessagethathasexpired.Ifnoaddressisdefinedherethensuchmessageswillsimplybediscarded.Readmoreaboutmessageexpiry.
expiry-delaydefinestheexpirationtimethatwillbeusedformessageswhichareusingthedefaultexpirationtime(i.e.0).Forexample,if expiry-delayissetto"10"andamessagewhichisusingthedefaultexpirationtime(i.e.0)arrivesthenitsexpirationtimeof"0"willbechangedto"10."However,ifamessagewhichisusinganexpirationtimeof"20"arrivesthenitsexpirationtimewillremainunchanged.Setting expiry-delayto"-1"willdisablethisfeature.Thedefaultis"-1".Readmoreaboutmessageexpiry.
max-delivery-attemptsdefineshowmanytimeacancelledmessagecanberedeliveredbeforesendingtothe dead-letter-address.Readmoreaboutundeliveredmessages.
redelivery-delaydefineshowlongtowaitbeforeattemptingredeliveryofacancelledmessage.Defaultis 0.Readmoreaboutundeliveredmessages.
redelivery-delay-multiplierdefinesthenumberbywhichthe redelivery-delaywillbemultipliedoneachsubsequentredeliveryattempt.Defaultis 1.0.Readmoreaboutundeliveredmessages.
redelivery-collision-avoidance-factordefinesanadditionalfactorusedtocalculateanadjustmenttothe redelivery-delay(upordown).Defaultis 0.0.Validvaluesarebetween0.0and1.0.Readmoreaboutundeliveredmessages.
max-size-bytes, page-size-bytes,& page-max-cache-sizeareusedtoconfigurepagingonanaddress.Thisisexplainedhere.
max-size-bytes-reject-thresholdisusedwiththeaddressfull BLOCKpolicy,themaximumsize(inbytes)anaddresscanreachbeforemessagesstartgettingrejected.Worksincombinationwith max-size-bytesforAMQPclientsonly.Defaultis-1(i.e.nolimit).
address-full-policy.Thisattributecanhaveoneofthefollowingvalues: PAGE, DROP, FAILor BLOCKanddetermineswhathappenswhenanaddresswhere max-size-bytesisspecifiedbecomesfull.Thedefaultvalueis PAGE.IfthevalueisPAGEthenfurthermessageswillbepagedtodisk.Ifthevalueis DROPthenfurthermessageswillbesilentlydropped.Ifthevalueis FAILthenfurthermessageswillbedroppedandanexceptionwillbethrownontheclient-side.Ifthevalueis BLOCKthenclientmessageproducerswillblockwhentheytryandsendfurthermessages.SeetheFlowControlandPagingchaptersformoreinfo.
message-counter-history-day-limitisthenumberofdaystokeepmessagecounterhistoryforthisaddressassumingthatmessage-counter-enabledis true.Defaultis 0.
last-value-queueisdeprecated.See default-last-value-queue.Itdefineswhetheraqueueonlyuseslastvaluesornot.Defaultis false.Readmoreaboutlastvaluequeues.
default-last-value-queuedefineswhetheraqueueonlyuseslastvaluesornot.Defaultis false.Thisvaluecanbeoverriddenatthequeuelevelusingthe last-valueboolean.Readmoreaboutlastvaluequeues.
default-exclusive-queuedefineswhetheraqueuewillserveonlyasingleconsumer.Defaultis false.Thisvaluecanbeoverriddenatthequeuelevelusingthe exclusiveboolean.Readmoreaboutexclusivequeues.
default-consumers-before-dispatchdefinesthenumberofconsumersneededonaqueueboundtothematchingaddressbeforemessageswillbedispatchedtothoseconsumers.Defaultis 0.Thisvaluecanbeoverriddenatthequeuelevelusingtheconsumers-before-dispatchboolean.Thisbehaviorcanbetunedusing delay-before-dispatchonthequeueitselforbyusingthe default-delay-before-dispatchaddress-setting.
default-delay-before-dispatchdefinesthenumberofmillisecondsthebrokerwillwaitfortheconfigurednumberofconsumerstoconnecttothematchingqueuebeforeitwillbegintodispatchmessages.Defaultis -1(waitforever).
AddressModel
45
redistribution-delaydefineshowlongtowaitwhenthelastconsumerisclosedonaqueuebeforeredistributinganymessages.Readmoreaboutclusters.
send-to-dla-on-no-route.Ifamessageissenttoanaddress,buttheserverdoesnotrouteittoanyqueues(e.g.theremightbenoqueuesboundtothataddress,ornoneofthequeueshavefiltersthatmatch)thennormallythatmessagewouldbediscarded.However,ifthisparameteris truethensuchamessagewillinsteadbesenttothe dead-letter-address(DLA)forthataddress,ifitexists.
slow-consumer-threshold.Theminimumrateofmessageconsumptionallowedbeforeaconsumerisconsidered"slow."Measuredinmessages-per-second.Defaultis -1(i.e.disabled);anyothervalidvaluemustbegreaterthan0.Readmoreaboutslowconsumers.
slow-consumer-policy.Whatshouldhappenwhenaslowconsumerisdetected. KILLwillkilltheconsumer'sconnection(whichwillobviouslyimpactanyotherclientthreadsusingthatsameconnection). NOTIFYwillsendaCONSUMER_SLOWmanagementnotificationwhichanapplicationcouldreceiveandtakeactionwith.Readmoreaboutslowconsumers.
slow-consumer-check-period.Howoftentocheckforslowconsumersonaparticularqueue.Measuredinseconds.Defaultis5.Readmoreaboutslowconsumers.
auto-create-jms-queuesisdeprecated.See auto-create-queues.WhetherornotthebrokershouldautomaticallycreateaJMSqueuewhenaJMSmessageissenttoaqueuewhosenamefitstheaddress match(remember,aJMSqueueisjustacorequeuewhichhasthesameaddressandqueuename)oraJMSconsumertriestoconnecttoaqueuewhosenamefitstheaddressmatch.Queueswhichareauto-createdaredurable,non-temporary,andnon-transient.Defaultis true.
auto-delete-jms-queuesisdeprecated.See auto-delete-queues.Whetherornotthebrokershouldautomaticallydeleteauto-createdJMSqueueswhentheyhaveboth0consumersand0messages.Defaultis true.
auto-create-jms-topicsisdeprecated.See auto-create-addresses.WhetherornotthebrokershouldautomaticallycreateaJMStopicwhenaJMSmessageissenttoatopicwhosenamefitstheaddress match(remember,aJMStopicisjustacoreaddresswhichhasoneormorecorequeuesmappedtoit)oraJMSconsumertriestosubscribetoatopicwhosenamefitstheaddress match.Defaultis true.
auto-delete-jms-topicsisdeprecated.See auto-delete-addresses.Whetherornotthebrokershouldautomaticallydeleteauto-createdJMStopicsoncethelastsubscriptiononthetopichasbeenclosed.Defaultis true.
auto-create-queues.Whetherornotthebrokershouldautomaticallycreateaqueuewhenamessageissentoraconsumertriestoconnecttoaqueuewhosenamefitstheaddress match.Queueswhichareauto-createdaredurable,non-temporary,andnon-transient.Defaultis true.Note:automaticqueuecreationdoesnotworkforthecoreclient.ThecoreAPIisalow-levelAPIandisnotmeanttohavesuchautomation.
auto-delete-queues.Whetherornotthebrokershouldautomaticallydeleteauto-createdqueueswhentheyhaveboth0consumersandthemessagecountislessthanorequalto auto-delete-queues-message-count.Defaultis true.
auto-delete-created-queues.Whetherornotthebrokershouldautomaticallydeletecreatedqueueswhentheyhaveboth0consumersandthemessagecountislessthanorequalto auto-delete-queues-message-count.Defaultis false.
auto-delete-queues-delay.Howlongtowait(inmilliseconds)beforedeletingauto-createdqueuesafterthequeuehas0consumersandthemessagecountislessthanorequalto auto-delete-queues-message-count.Defaultis 0(deleteimmediately).Thebroker's address-queue-scan-periodcontrolshowoften(inmilliseconds)queuesarescannedforpotentialdeletion.Use -1todisablescanning.Thedefaultscanvalueis 30000.
auto-delete-queues-message-count.Themessagecountthatthequeuemustbelessthanorequaltobeforedeletingauto-createdqueues.Todisablemessagecountcheck -1canbeset.Defaultis 0(emptyqueue).
Note:theaboveauto-deleteaddresssettingscanalsobeconfiguredindividuallyatthequeuelevelwhenaclientautocreatesthequeue.
ForCoreAPIitisexposedincreateQueuemethods.
AddressModel
46
ForCoreJMSyoucansetitusingthedestinationqueueattributes my.destination?auto-delete=true&auto-delete-delay=120000&auto-delete-message-count=-1
config-delete-queues.Howthebrokershouldhandlequeuesdeletedonconfigreload,bydeletepolicy: OFFor FORCE.Defaultis OFF.Readmoreaboutconfigurationreload.
auto-create-addresses.Whetherornotthebrokershouldautomaticallycreateanaddresswhenamessageissenttooraconsumertriestoconsumefromaqueuewhichismappedtoanaddresswhosenamefitstheaddress match.Defaultis true.Note:automaticaddresscreationdoesnotworkforthecoreclient.ThecoreAPIisalow-levelAPIandisnotmeanttohavesuchautomation.
auto-delete-addresses.Whetherornotthebrokershouldautomaticallydeleteauto-createdaddressesoncetheaddressnolongerhasanyqueues.Defaultis true.
auto-delete-addresses-delay.Howlongtowait(inmilliseconds)beforedeletingauto-createdaddressesaftertheynolongerhaveanyqueues.Defaultis 0(deleteimmediately).Thebroker's address-queue-scan-periodcontrolshowoften(inmilliseconds)addressesarescannedforpotentialdeletion.Use -1todisablescanning.Thedefaultscanvalueis 30000.
config-delete-addresses.Howthebrokershouldhandleaddressesdeletedonconfigreload,bydeletepolicy: OFFor FORCE.Defaultis OFF.Readmoreaboutconfigurationreload.
management-browse-page-sizeisthenumberofmessagesamanagementresourcecanbrowse.Thisisrelevantforthe"browse"managementmethodexposedonthequeuecontrol.Defaultis 200.
default-purge-on-no-consumersdefinesaqueue'sdefault purge-on-no-consumerssettingifnoneisprovidedonthequeueitself.Defaultis false.Thisvaluecanbeoverriddenatthequeuelevelusingthe purge-on-no-consumersboolean.Readmoreaboutthisfunctionality.
default-max-consumersdefinesaqueue'sdefault max-consumerssettingifnoneisprovidedonthequeueitself.Defaultis -1(i.e.nolimit).Thisvaluecanbeoverriddenatthequeuelevelusingthe max-consumersboolean.Readmoreaboutthisfunctionality.
default-queue-routing-typedefinestherouting-typeforanauto-createdqueueifthebrokerisunabletodeterminetherouting-typebasedontheclientand/orprotocolsemantics.Defaultis MULTICAST.Readmoreaboutroutingtypes.
default-address-routing-typedefinestherouting-typeforanauto-createdaddressifthebrokerisunabletodeterminetherouting-typebasedontheclientand/orprotocolsemantics.Defaultis MULTICAST.Readmoreaboutroutingtypes.
default-consumer-window-sizedefinesthedefault consumerWindowSizevaluefora COREprotocolconsumer,ifnotdefinedthedefaultwillbesetto1MiB(1024*1024bytes).Theconsumerwillusethisvalueasthewindowsizeifthevalueisnotsetontheclient.Readmoreaboutflowcontrol.
default-ring-sizedefinesthedefault ring-sizevalueforanymatchingqueuewhichdoesn'thave ring-sizeexplicitlydefined.Ifnotdefinedthedefaultwillbesetto-1.Readmoreaboutringqueues.
retroactive-message-countdefinesthenumberofmessagestopreserveforfuturequeuescreatedonthematchingaddress.Defaultsto0.Readmoreaboutretroactiveaddresses.
AddressModel
47
ProtocolsandInteroperabilityApacheActiveMQArtemishasapowerful&flexiblecorewhichprovidesafoundationuponwhichotherprotocolscanbeimplemented.Eachprotocolimplementationtranslatestheideasofitsspecificprotocolontothiscore.
Thebrokershipswithaclientimplementationwhichinteractsdirectlywiththiscore.Ituseswhat'scalledthe"core"API,anditcommunicatesoverthenetworkusingthe"core"protocol.
SupportedProtocols&APIs
Thebrokerhasapluggableprotocolarchitecture.Protocolpluginscomeintheformofprotocolmodules.Eachprotocolmoduleisincludedonthebroker'sclasspathandloadedbythebrokeratboottime.Thebrokershipswith5protocolmodulesoutofthebox.The5modulesoffersupportforthefollowingprotocols:
AMQPOpenWireMQTTSTOMPHornetQ
APIsandOtherInterfaces
AlthoughJMSisastandardizedAPI,itdoesnotdefineanetworkprotocol.TheActiveMQArtemisJMS2.0clientisimplementedontopofthecoreprotocol.Wealsoprovideaclient-sideJNDIimplementation.
ThebrokeralsoshipswithaRESTmessaginginterface(nottobeconfusedwiththeRESTmanagementAPIprovidedviaourintegrationwithJolokia).
ConfiguringAcceptors
Inordertomakeuseofaparticularprotocol,atransportmustbeconfiguredwiththedesiredprotocolenabled.Thereisawholesectiononconfiguringtransportsthatcanbefoundhere.
ThedefaultconfigurationshippedwiththeActiveMQArtemisdistributioncomeswithanumberofacceptorsalreadydefined,oneforeachoftheaboveprotocolsplusagenericacceptorthatsupportsallprotocols.Toenableprotocolsonaparticularacceptorsimplyaddthe protocolsurlparametertotheacceptorurlwherethevalueisoneormoreprotocols(separatedbycommas).Ifthe protocolsparameterisomittedfromtheurlallprotocolsareenabled.
ThefollowingexampleenablesonlyMQTTonport1883
tcp://localhost:1883?protocols=MQTT
ThefollowingexampleenablesMQTTandAMQPonport5672
tcp://localhost:5672?protocols=MQTT,AMQP
Thefollowingexampleenablesallprotocolson 61616:
ProtocolsandInteroperability
48
tcp://localhost:61616
Herearethesupportedprotocolsandtheircorrespondingvalueusedinthe protocolsurlparameter.
Protocol protocolsvalue
Core(Artemis&HornetQnative) CORE
OpenWire(5.xnative) OPENWIRE
AMQP AMQP
MQTT MQTT
STOMP STOMP
ProtocolsandInteroperability
49
AMQPApacheActiveMQArtemissupportstheAMQP1.0specification.Bydefaultthereare acceptorelementsconfiguredtoacceptAMQPconnectionsonports 61616and 5672.
SeethegeneralProtocolsandInteroperabilitychapterfordetailsonconfiguringan acceptorforAMQP.
YoucanuseanyAMQP1.0compatibleclients.
Ashortlistincludes:
qpidclients.NETClientsJavascriptNodeJSJavaScriptRHEA...andmanyothers.
ExamplesWehaveafewexamplesaspartoftheArtemisdistribution:
.NET:./examples/protocols/amqp/dotnet
ProtonCPP./examples/protocols/amqp/proton-cpp./examples/protocols/amqp/proton-clustered-cpp
Ruby./examples/protocols/amqp/proton-ruby
Java(UsingtheqpidJMSClient)./examples/protocols/amqp/queue
Interceptors./examples/features/standard/interceptor-amqp./examples/features/standard/broker-plugin
MessageConversions
ThebrokerwillnotperformanymessageconversiontoanyotherprotocolswhensendingAMQPandreceivingAMQP.
HoweverifyouintendyourmessagetobereceivedbyanAMQPJMSClient,youmustfollowtheJMSMappingConventions.IfyousendabodytypethatisnotrecognizedbythisspecificationtheconversionbetweenAMQPandanyotherprotocolwillmakeitaBinaryMessage.Makesureyoufollowtheseconventionsifyouintendtocrossprotocolsorlanguages.Especiallyonthemessagebody.
AcompatibilitysettingallowsaligningthenamingconventionofAMQPqueues(JMSDurableandSharedSubscriptions)withCORE.Forbackwardscompatibilityreasons,youneedtoexplicitlyenablethisviabrokerconfiguration:
amqp-use-core-subscription-naming
true-usequeuenamingconventionthatisalignedwithCORE.false(default)-useoldernamingconvention.
AMQP
50
https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=amqphttps://qpid.apache.org/download.htmlhttps://blogs.apache.org/activemq/entry/using-net-libraries-with-activemqhttps://github.com/noodlefrenzy/node-amqp10https://github.com/grs/rheahttps://www.oasis-open.org/committees/download.php/53086/amqp-bindmap-jms-v1.0-wd05.pdf
Interceptingandchangingmessages
Wedon'trecommendchangingmessagesattheserver'ssideforafewreasons:
AMQPmessagesaremeanttobeimmutableThemessagewon'tbetheoriginalmessagetheusersentAMQPhasthepossibilityofsigningmessages.Thesignaturewouldbebroken.Forperformancereasons.Wetrynottore-encode(orevendecode)messages.
IfregardlesstheserecommendationsyoustillneedandwanttointerceptandchangeAMQPmessages,lookattheaforementionedinterceptorexamples.
AMQPandsecurity
TheApacheActiveMQArtemisServeracceptsthePLAIN,ANONYMOUS,andGSSAPISASLmechanism.Theseareimplementedonthebroker'ssecurityinfrastructure.
AMQPanddestinations
IfanAMQPLinkisdynamicthenatemporaryqueuewillbecreatedandeithertheremotesourceorremotetargetaddresswillbesettothenameofthetemporaryqueue.IftheLinkisnotdynamicthenthetheaddressoftheremotetargetorsourcewillusedforthequeue.Ifthisdoesnotexistthenitwillbeauto-createdifthesettingsallow.
AMQPandMulticastAddresses(Topics)
AlthoughAMQPhasnonotionof"topics"itisstillpossibletotreatAMQPconsumersorreceiversassubscriptionsratherthanjustconsumersonaqueue.Bydefaultanyreceivinglinkthatattachestoanaddressthathasonly multicastenabledwillbetreatedasasubscriptionandacorrespondingsubscriptionqueuewillbecreated.IftheTerminusDurabilityiseitherUNSETTLED_STATEor CONFIGURATIONthenthequeuewillbemadedurable(similartoaJMSdurablesubscription)andgivenanamemadeupfromthecontaineridandthelinkname,somethinglike my-container-id:my-link-name.IftheTerminusDurabilityisconfiguredas NONEthenavolatile multicastqueuewillbecreated.
AMQPandCoordinations-HandlingTransactions
AnAMQPlinkstargetcanalsobeaCoordinator.ACoordinatorisusedtohandletransactions.Ifacoordinatorisusedthentheunderlyingserversessionwillbetransactedandwillbeeitherrolledbackorcommittedviathecoordinator.
Note:
AMQPallowstheuseofmultipletransactionspersession, amqp:multi-txns-per-ssn,howeverinthisversionofApacheActiveMQArtemiswillonlysupportsingletransactionspersession.
AMQPschedulingmessagedelivery
AnAMQPmessagecanprovideschedulinginformationthatcontrolsthetimeinthefuturewhenthemessagewillbedeliveredattheearliest.Thisinformationisprovidedbyaddingamessageannotationtothesentmessage.
Therearetwodifferentmessageannotationsthatcanbeusedtoscheduleamessageforlaterdelivery:
AMQP
51
x-opt-delivery-timeThespecifiedvaluemustbeapositivelongcorrespondingtothetimethemessageshouldbemadeavailablefordelivery(inmilliseconds).
x-opt-delivery-delayThespecifiedvaluemustbeapositivelongcorrespondingtotheamountofmillisecondsafterthebrokerreceivesthegivenmessagebeforeitshouldbemadeavailablefordelivery.
Ifbothannotationsarepresentinthesamemessagethenthebrokerwillpreferthemorespecific x-opt-delivery-timevalue.
ConfiguringAMQPIdleTimeoutItispossibletoconfiguretheAMQPServer'sIDLETimeoutbysettingthepropertyamqpIdleTimeoutinmillisecondsontheacceptor.
ThiswillmaketheservertosendanAMQPframeopentotheclient,withyourconfiguredtimeout/2.
So,ifyouconfiguredyourAMQPIdleTimeouttobe60000,theserverwilltelltheclienttosendframesevery30,000milliseconds.
....;amqpIdleTimeout=;.....
DisablingKeepalivechecks
ifyousetamqpIdleTimeout=0thatwilltellclientstonotsendingkeepalivepacketstowardstheserver.OnthiscaseyouwillrelyonTCPtodeterminewhenthesocketneedstobeclosed.
....;amqpIdleTimeout=0;.....
ThiscontainsarealexampleforconfiguringamqpIdleTimeout:
tcp://0.0.0.0:5672?amqpIdleTimeout=0;tcpSendBufferSize=1048576;tcpReceiveBufferSize=10485
76;protocols=AMQP;useEpoll=true;amqpCredits=1000;amqpMinCredits=300;directDeliver=false;batchDelay=10
AMQP
52
MQTTMQTTisalightweight,clienttoserver,publish/subscribemessagingprotocol.MQTThasbeenspecificallydesignedtoreducetransportoverhead(andthusnetworktraffic)andcodefootprintonclientdevices.ForthisreasonMQTTisideallysuitedtoconstraineddevicessuchassensorsandactuatorsandisquicklybecomingthedefactostandardcommunicationprotocolforIoT.
ApacheActiveMQArtemissupportsMQTTv3.1.1(andalsotheolderv3.1codemessageformat).BydefaultthereareacceptorelementsconfiguredtoacceptMQTTconnectionsonports 61616and 1883.
SeethegeneralProtocolsandInteroperabilitychapterfordetailsonconfiguringan acceptorforMQTT.
ThebestsourceofinformationontheMQTTprotocolisinthe3.1.1specification.
RefertotheMQTTexamplesforalookatsomeofthisfunctionalityinaction.
MQTTQualityofServiceMQTToffers3qualityofservicelevels.
Eachmessage(ortopicsubscription)candefineaqualityofservicethatisassociatedwithit.Thequalityofserviceleveldefinedonatopicisthemaximumlevelaclientiswillingtoaccept.Thequalityofservicelevelonamessageisthedesiredqualityofservicelevelforthismessage.Thebroker