Spring Boot ActiveMQ如何設(shè)置訪問密碼
Apache ActiveMQ是Apache出品,是最流行的,能力很強(qiáng)的開源消息總線。默認(rèn)情況下,程序連接ActiveMQ是不需要密碼的,為了安裝起見,需要設(shè)置密碼,提高安全性。本文分享如何設(shè)置訪問ActiveMQ的賬號密碼。
小編使用的ActiveMQ版本是apache-activemq-5.15.13。
一、設(shè)置控制臺管理密碼
ActiveMQ使用的是jetty服務(wù)器,找到 ActiveMQ安裝目錄下的\conf\jetty.xml文件:
<bean id="adminSecurityConstraint" class="org.eclipse.jetty.util.security.Constraint"> <property name="name" value="BASIC" /> <property name="roles" value="admin" /> <!-- set authenticate=false to disable login --> <property name="authenticate" value="true" /> </bean>
注意:authenticate的屬性默認(rèn)為"true",登錄管理界面時需要輸入賬戶和密碼;如果是“false”,需要改為"true"。
修改管理界面登錄時的用戶名和密碼,在conf/jetty-realm.properties文件中添加用戶
## --------------------------------------------------------------------------- ## Licensed to the Apache Software Foundation (ASF) under one or more ## contributor license agreements. See the NOTICE file distributed with ## this work for additional information regarding copyright ownership. ## The ASF licenses this file to You under the Apache License, Version 2.0 ## (the "License"); you may not use this file except in compliance with ## the License. You may obtain a copy of the License at ## ## http://www.apache.org/licenses/LICENSE-2.0 ## ## Unless required by applicable law or agreed to in writing, software ## distributed under the License is distributed on an "AS IS" BASIS, ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ## See the License for the specific language governing permissions and ## limitations under the License. ## --------------------------------------------------------------------------- # Defines users that can access the web (console, demo, etc.) # username: password [,rolename ...] # admin: admin, admin # user: user, user wiener: wiener1237, admin
配置信息按順序解釋,分別是:用戶名、密碼、角色名
二、消息生產(chǎn)者和消費(fèi)者密碼認(rèn)證
在\conf\activemq.xml中broker 標(biāo)簽最后添加生產(chǎn)者和消費(fèi)者密碼認(rèn)證信息:
<!-- destroy the spring context on shutdown to stop jetty --> <shutdownHooks> <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" /> </shutdownHooks> <!-- add plugins --> <plugins> <simpleAuthenticationPlugin> <users> <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/> </users> </simpleAuthenticationPlugin> </plugins> </broker>
activemq.username和activemq.password的值在文件credentials.properties中配置,見如下步驟。
設(shè)置用戶名密碼,文件在\conf\credentials.properties
## --------------------------------------------------------------------------- ## Licensed to the Apache Software Foundation (ASF) under one or more ## contributor license agreements. See the NOTICE file distributed with ## this work for additional information regarding copyright ownership. ## The ASF licenses this file to You under the Apache License, Version 2.0 ## (the "License"); you may not use this file except in compliance with ## the License. You may obtain a copy of the License at ## ## http://www.apache.org/licenses/LICENSE-2.0 ## ## Unless required by applicable law or agreed to in writing, software ## distributed under the License is distributed on an "AS IS" BASIS, ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ## See the License for the specific language governing permissions and ## limitations under the License. ## --------------------------------------------------------------------------- # Defines credentials that will be used by components (like web console) to access the broker # activemq.username=system # activemq.password=manager # guest.password=password activemq.username=wiener activemq.password=wiener1237 guest.password=password
三、Java端配置用戶名密碼
驗(yàn)證代碼是在《【Spring Boot】ActiveMQ 發(fā)布/訂閱消息模式介紹》的基礎(chǔ)上做重構(gòu),除了新增類ActiveMQConfig之外,修改部分均用紅色字體標(biāo)注。配置application.properties連接信息:
## URL of the ActiveMQ broker. Auto-generated by default. For instance `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 #默認(rèn)值false,表示point to point(點(diǎn)到點(diǎn))模式,true時代表發(fā)布訂閱模式,需要手動開啟 spring.jms.pub-sub-domain=true spring.activemq.user=wiener spring.activemq.password=wiener1237
在項(xiàng)目中配置 ActiveMQ連接屬性,新增ActiveMQConfig類:
import org.apache.activemq.ActiveMQConnectionFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.config.DefaultJmsListenerContainerFactory; import org.springframework.jms.config.JmsListenerContainerFactory; /** * 配置 ActiveMQ * * @author east7 * @date 2020/6/23 11:27 */ @Configuration public class ActiveMQConfig { @Value("${spring.activemq.user}") private String usrName; @Value("${spring.activemq.password}") private String password; @Value("${spring.activemq.broker-url}") private String brokerUrl; @Bean public ActiveMQConnectionFactory connectionFactory() { System.out.println("password =========== " + password); return new ActiveMQConnectionFactory(usrName, password, brokerUrl); } /** * 設(shè)置點(diǎn)對點(diǎn)模式,和下面的發(fā)布訂閱模式二選一即可 * @param connectionFactory * @return */ @Bean public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory){ DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setConnectionFactory(connectionFactory); return bean; } @Bean public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory){ //設(shè)置為發(fā)布訂閱模式, 默認(rèn)情況下使用生產(chǎn)消費(fèi)者方式 DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory(); bean.setPubSubDomain(true); bean.setConnectionFactory(connectionFactory); return bean; } }
bean.setPubSubDomain(true)配置會覆蓋properties文件中spring.jms.pub-sub-domain的屬性值,故可以在properties不設(shè)置spring.jms.pub-sub-domain屬性。另外,這種配置方式可以在系統(tǒng)中同時使用點(diǎn)對點(diǎn)和發(fā)布/訂閱兩種消息模式。修改訂閱者:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component; import javax.jms.JMSException; /** * 消費(fèi)者 */ @Component public class Subscriber1 { private static Logger logger = LoggerFactory.getLogger(Subscriber1.class); /** * 訂閱 topicListener1,僅僅加入containerFactory即可 * * @param text * @throws JMSException */ @JmsListener(destination = "topicListener1", containerFactory = "jmsListenerContainerTopic") public void subscriber(String text) { logger.info("Subscriber1 收到的報(bào)文:{}", text); } }
containerFactory 的值 "jmsListenerContainerTopic" 會自動匹配到ActiveMQConfig中的函數(shù)JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory)。 Subscriber2同樣修改即可,代碼省略。如果containerFactory 的值設(shè)置為jmsListenerContainerQueue,則開啟了點(diǎn)到點(diǎn)消息模式。
測試函數(shù)還可以使用topicTest()。下面提供一個新的測試途徑——在controller中測試。新增方法
@Autowired private Publisher publisher; @GetMapping("/sendTopicMsg") public String sendTopicMsg(String msg) { // 指定消息發(fā)送的目的地及內(nèi)容 Destination destination = new ActiveMQTopic("topicListener2"); for (int i = 0; i < 8; i++) { publisher.publish(destination, msg + i); } return msg + " 發(fā)送完畢"; }
執(zhí)行結(jié)果省略。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)文件批量重命名具體實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)文件批量重命名具體實(shí)例,需要的朋友可以參考下2014-02-02Java模擬撲克牌洗牌實(shí)現(xiàn)生成52張撲克的方法示例
這篇文章主要介紹了Java模擬撲克牌洗牌實(shí)現(xiàn)生成52張撲克的方法,涉及Java數(shù)組遍歷、重排及輸出等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Maven項(xiàng)目報(bào)錯:“?SLF4J:?Failed?to?load?class?“org.slf4j.imp
這篇文章主要給大家介紹了關(guān)于Maven項(xiàng)目報(bào)錯:“?SLF4J:?Failed?to?load?class?“org.slf4j.impl.StaticLoggerBinder?”的解決方案,文中給出詳細(xì)的解決思路與方法,需要的朋友可以參考下2022-03-03MyBatis之foreach標(biāo)簽的用法及多種循環(huán)問題
這篇文章主要介紹了MyBatis之foreach標(biāo)簽的用法及多種循環(huán)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11Java回調(diào)函數(shù)實(shí)例代碼詳解
這篇文章主要介紹了Java回調(diào)函數(shù)實(shí)例代碼詳解,需要的朋友可以參考下2017-10-10