Spring Boot ActiveMQ如何设置访问密码
ApacheActiveMQ是Apache出品,是最流行的,能力很强的开源消息总线。默认情况下,程序连接ActiveMQ是不需要密码的,为了安装起见,需要设置密码,提高安全性。本文分享如何设置访问ActiveMQ的账号密码。
小编使用的ActiveMQ版本是apache-activemq-5.15.13。
一、设置控制台管理密码
ActiveMQ使用的是jetty服务器,找到ActiveMQ安装目录下的\conf\jetty.xml文件:
注意:authenticate的属性默认为"true",登录管理界面时需要输入账户和密码;如果是“false”,需要改为"true"。
修改管理界面登录时的用户名和密码,在conf/jetty-realm.properties文件中添加用户
##--------------------------------------------------------------------------- ##LicensedtotheApacheSoftwareFoundation(ASF)underoneormore ##contributorlicenseagreements.SeetheNOTICEfiledistributedwith ##thisworkforadditionalinformationregardingcopyrightownership. ##TheASFlicensesthisfiletoYouundertheApacheLicense,Version2.0 ##(the"License");youmaynotusethisfileexceptincompliancewith ##theLicense.YoumayobtainacopyoftheLicenseat ## ##http://www.apache.org/licenses/LICENSE-2.0 ## ##Unlessrequiredbyapplicablelaworagreedtoinwriting,software ##distributedundertheLicenseisdistributedonan"ASIS"BASIS, ##WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. ##SeetheLicenseforthespecificlanguagegoverningpermissionsand ##limitationsundertheLicense. ##--------------------------------------------------------------------------- #Definesusersthatcanaccesstheweb(console,demo,etc.) #username:password[,rolename...] #admin:admin,admin #user:user,user wiener:wiener1237,admin
配置信息按顺序解释,分别是:用户名、密码、角色名
二、消息生产者和消费者密码认证
在\conf\activemq.xml中broker标签最后添加生产者和消费者密码认证信息:
activemq.username和activemq.password的值在文件credentials.properties中配置,见如下步骤。
设置用户名密码,文件在\conf\credentials.properties
##--------------------------------------------------------------------------- ##LicensedtotheApacheSoftwareFoundation(ASF)underoneormore ##contributorlicenseagreements.SeetheNOTICEfiledistributedwith ##thisworkforadditionalinformationregardingcopyrightownership. ##TheASFlicensesthisfiletoYouundertheApacheLicense,Version2.0 ##(the"License");youmaynotusethisfileexceptincompliancewith ##theLicense.YoumayobtainacopyoftheLicenseat ## ##http://www.apache.org/licenses/LICENSE-2.0 ## ##Unlessrequiredbyapplicablelaworagreedtoinwriting,software ##distributedundertheLicenseisdistributedonan"ASIS"BASIS, ##WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied. ##SeetheLicenseforthespecificlanguagegoverningpermissionsand ##limitationsundertheLicense. ##--------------------------------------------------------------------------- #Definescredentialsthatwillbeusedbycomponents(likewebconsole)toaccessthebroker #activemq.username=system #activemq.password=manager #guest.password=password activemq.username=wiener activemq.password=wiener1237 guest.password=password
三、Java端配置用户名密码
验证代码是在《【SpringBoot】ActiveMQ发布/订阅消息模式介绍》的基础上做重构,除了新增类ActiveMQConfig之外,修改部分均用红色字体标注。配置application.properties连接信息:
##URLoftheActiveMQbroker.Auto-generatedbydefault.Forinstance`tcp://localhost:61616` #failover:(tcp://localhost:61616,tcp://localhost:61617) #tcp://localhost:61616 spring.activemq.broker-url=tcp://localhost:61616 spring.activemq.in-memory=true spring.activemq.pool.enabled=false #默认值false,表示pointtopoint(点到点)模式,true时代表发布订阅模式,需要手动开启 spring.jms.pub-sub-domain=true spring.activemq.user=wiener spring.activemq.password=wiener1237
在项目中配置ActiveMQ连接属性,新增ActiveMQConfig类:
importorg.apache.activemq.ActiveMQConnectionFactory; importorg.springframework.beans.factory.annotation.Value; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importorg.springframework.jms.config.DefaultJmsListenerContainerFactory; importorg.springframework.jms.config.JmsListenerContainerFactory; /** *配置ActiveMQ * *@authoreast7 *@date2020/6/2311:27 */ @Configuration publicclassActiveMQConfig{ @Value("${spring.activemq.user}") privateStringusrName; @Value("${spring.activemq.password}") privateStringpassword; @Value("${spring.activemq.broker-url}") privateStringbrokerUrl; @Bean publicActiveMQConnectionFactoryconnectionFactory(){ System.out.println("password==========="+password); returnnewActiveMQConnectionFactory(usrName,password,brokerUrl); } /** *设置点对点模式,和下面的发布订阅模式二选一即可 *@paramconnectionFactory *@return */ @Bean publicJmsListenerContainerFactory>jmsListenerContainerQueue(ActiveMQConnectionFactoryconnectionFactory){ DefaultJmsListenerContainerFactorybean=newDefaultJmsListenerContainerFactory(); bean.setConnectionFactory(connectionFactory); returnbean; } @Bean publicJmsListenerContainerFactory>jmsListenerContainerTopic(ActiveMQConnectionFactoryconnectionFactory){ //设置为发布订阅模式,默认情况下使用生产消费者方式 DefaultJmsListenerContainerFactorybean=newDefaultJmsListenerContainerFactory(); bean.setPubSubDomain(true); bean.setConnectionFactory(connectionFactory); returnbean; } }
bean.setPubSubDomain(true)配置会覆盖properties文件中spring.jms.pub-sub-domain的属性值,故可以在properties不设置spring.jms.pub-sub-domain属性。另外,这种配置方式可以在系统中同时使用点对点和发布/订阅两种消息模式。修改订阅者:
importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importorg.springframework.jms.annotation.JmsListener; importorg.springframework.stereotype.Component; importjavax.jms.JMSException; /** *消费者 */ @Component publicclassSubscriber1{ privatestaticLoggerlogger=LoggerFactory.getLogger(Subscriber1.class); /** *订阅topicListener1,仅仅加入containerFactory即可 * *@paramtext *@throwsJMSException */ @JmsListener(destination="topicListener1",containerFactory="jmsListenerContainerTopic") publicvoidsubscriber(Stringtext){ logger.info("Subscriber1收到的报文:{}",text); } }
containerFactory的值"jmsListenerContainerTopic"会自动匹配到ActiveMQConfig中的函数JmsListenerContainerFactory>jmsListenerContainerTopic(ActiveMQConnectionFactoryconnectionFactory)。Subscriber2同样修改即可,代码省略。如果containerFactory的值设置为jmsListenerContainerQueue,则开启了点到点消息模式。
测试函数还可以使用topicTest()。下面提供一个新的测试途径——在controller中测试。新增方法
@Autowired privatePublisherpublisher; @GetMapping("/sendTopicMsg") publicStringsendTopicMsg(Stringmsg){ //指定消息发送的目的地及内容 Destinationdestination=newActiveMQTopic("topicListener2"); for(inti=0;i<8;i++){ publisher.publish(destination,msg+i); } returnmsg+"发送完毕"; }
执行结果省略。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。