Spring Boot ActiveMQ 접근 암 호 를 설정 하 는 방법

Apache ActiveMQ 는 Apache 제품 으로 가장 유행 하 며 능력 이 강 한 오픈 소스 메시지 버스 입 니 다.기본적으로 프로그램 이 ActiveMQ 에 연결 하 는 데 는 비밀번호 가 필요 하지 않 으 며,설치 하기 위해 서 는 비밀 번 호 를 설정 하여 안전성 을 높 여야 합 니 다.이 글 은 ActiveMQ 에 접근 하 는 계 정 비밀 번 호 를 설정 하 는 방법 을 공유 합 니 다.
소 편 에서 사용 하 는 ActiveMQ 버 전 은 apache-activemq-5.15.13 입 니 다.
1.콘 솔 관리 비밀번호 설정
ActiveMQ 는 Jetty 서버 를 사용 합 니 다.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 의 속성 은 기본적으로"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
설정 정 보 는 사용자 이름,비밀번호,캐릭터 이름 순 으로 설명 합 니 다.
2.정보 생산자 와 소비자 비밀번호 인증
\conf\activemq.xml 에서 broker 태그 에 마지막 으로 생산자 와 소비자 비밀번호 인증 정 보 를 추가 합 니 다.

<!-- 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 에서 설정 합 니 다.다음 절 차 를 참조 하 십시오.
사용자 이름 비밀 번 호 를 설정 합 니 다.파일 은\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
3.자바 엔 드 설정 사용자 이름 비밀번호
인증 코드 는'[Spring Boot]ActiveMQ 게시/구독 메시지 모드 소개'를 바탕 으로 재 구성 되 며,추가 클래스 인 ActiveMQConfig 를 제외 하고 수정 부분 은 모두 빨간색 글꼴 로 표 시 됩 니 다.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
#   false,  point to point(   )  ,true         ,      
spring.jms.pub-sub-domain=true
spring.activemq.user=wiener
spring.activemq.password=wiener1237
프로젝트 에 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);
  }

  /**
   *        ,               
   * @param connectionFactory
   * @return
   */
  @Bean
  public JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory){
    DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
    bean.setConnectionFactory(connectionFactory);
    return bean;
  }

  @Bean
  public JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory){
    //         ,               
    DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
    bean.setPubSubDomain(true);
    bean.setConnectionFactory(connectionFactory);
    return bean;
  }
}
bean.setPub SubDomain(true)설정 은 properties 파일 에 spring.jms.pub-sub-domain 의 속성 값 을 덮어 쓰기 때문에 properties 에 spring.jms.pub-sub-domain 속성 을 설정 하지 않 을 수 있 습 니 다.또한 이러한 설정 방식 은 시스템 에서 점대 점 과 게시/구독 두 가지 메시지 모드 를 동시에 사용 할 수 있다.구독 자 수정:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

import javax.jms.JMSException;

/**
*    
*/
@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      :{}", text);
  }
}
container Factory 의 값"jmsListener Container Topic"은 ActiveMQConfig 의 함수 JmsListener Container Factory와 자동 으로 일치 합 니 다.jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory)。 Subscriber 2 역시 수정 하면 됩 니 다.코드 는 생략 합 니 다.container Factory 의 값 이 jmsListener Container Queue 로 설정 되면 점 도착 메시지 모드 가 열 립 니 다.
테스트 함 수 는 topicTest()도 사용 할 수 있 습 니 다.다음은 새로운 테스트 경 로 를 제공 합 니 다.contrller 에서 테스트 합 니 다.새로운 방법

@Autowired
private Publisher publisher;

@GetMapping("/sendTopicMsg")
public String sendTopicMsg(String msg) {
  //              
  Destination destination = new ActiveMQTopic("topicListener2");
  for (int i = 0; i < 8; i++) {
    publisher.publish(destination, msg + i);
  }
  return msg + "     ";
}
실행 결과 생략.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기