봄 부팅 정보 MQTT 통합

설치

: 먼저 설치해야합니다, MQTT 말하기, 설치 주소 무엇 HTTP : //activemq.apache.org/ap ...
나는, 로컬 Windows 환경 해요 그래서 Windows 버전을 설치, 여기가 첫 번째 주입니다 장소, 다른 윈도우와 리눅스의 일부 뒤에 시간을 사용하기 때문에

다운로드가 완료 추출물이되면 내 명령 MyBroker라고 있도록하는 서비스 인스턴스의 인스턴스 이름입니다 완료 후 여기에 아래의 bin 디렉토리로 압축 해제를 설치하거나 자신의 사용도 여기에 명령 창을 열고 cmd를 직접적으로, 다음 실행 apollo.cmd 작성 apollo.cmd MyBroker라고 생성이 쉽게 자신의 이름을 지정할 수 있습니다

당신이 더 많은 폴더가 아닌있는 bin 디렉토리의 인스턴스를 생성 한 후,이 폴더는 인스턴스 이름은 폴더에 실행입니다 
.apollo-broker.cmd 명령을 실행

이것은 성공을 시작합니다

 

성공을 시작할 수 HTTP : // 로컬 호스트 : 61680 / 콘솔 / index.html을 보면, 사용자 이름과 암호가 갈 수있는 입력 파일 mybrokeretcusers.properties에서 발견

 

 

숫자가 페이지의 정보에 대응 및 연결 정보, 관심 일견의 주제에 가입되어 있습니다, 그것은 나중에 언급 될 것이다

용도

다음 단계는 첫째, 구성의 도입을 받는다는 프로젝트를 생성, 성공적인 설치를 사용하는 것입니다

    <!--mqtt-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-integration</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-stream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.integration</groupId>
        <artifactId>spring-integration-mqtt</artifactId>
    </dependency>

SLF4J를 촉진하기 위해 나중에 소비자 인쇄 메시지를 기록 우리가 가입 있기 때문에 롬복 구성을 소개 :

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

완료를 도입 한 후 우리는 MQTT를 사용하여 시작할 준비가
I 특성 파일 내부의 일부 구성 매개 변수를 넣어 유지 보수 및 구성의 편의를 위해 여기 :

#MQTT配置信息

spring.mqtt.username=admin

spring.mqtt.password=password

spring.mqtt.url=tcp://localhost:61613

spring.mqtt.client.id=clientId

spring.mqtt.server.id=serverId

spring.mqtt.default.topic=topic

여기에 내가 구덩이가 특별히 주석, 동일하지 않을해야하는 정보의 정보 보급의 가입 ID와 끝 ID 최종 보급에 가입하는 것입니다 만난이이 연결이 해제 될 밖으로, ID의 두 가지로 인식 MQTT에 소식을 이끌 것입니다, 항상 내가 오랫동안 어떤 문제 모르는 좋은을 찾아 문제를 메시지를 수신 종료 구독은 4 년으로 착각하기 쉬운, 두 번째 질문은 윈도우와 리눅스에서 MQTT 서버 연결 주소, TCP는 포트는 동일, 아폴로 로그의 시작은 볼 수없는

 

TCP 포트 61613을 청취하면 롬 된 경우 데모 많은 1883 다른 사람들이, 아마이 때문에입니다 볼 수 있습니다

다음 단계는 spring.mqtt.default.topic 구성으로, 이것은 MQTT 구독하고 메시지 제목, 푸시 메시지를 수신하기 위해 정보의 메시지와 테마 일관된 보급에 가입하고자하는 메시지의 다음 대상이 있기 때문에, 그리고 rabbitmq 등

클라이언트는 다음이다

@Configuration
@IntegrationComponentScan
@Slf4j
public class MqttSenderConfig {

    @Value("${spring.mqtt.username}")
    private String username;

    @Value("${spring.mqtt.password}")
    private String password;

    @Value("${spring.mqtt.url}")
    private String hostUrl;

    @Value("${spring.mqtt.client.id}")
    private String clientId;

    @Value("${spring.mqtt.default.topic}")
    private String defaultTopic;

    @Bean
    public MqttConnectOptions getMqttConnectOptions(){
        MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();
        mqttConnectOptions.setUserName(username);
        mqttConnectOptions.setPassword(password.toCharArray());
        mqttConnectOptions.setServerURIs(new String[]{hostUrl});
        mqttConnectOptions.setKeepAliveInterval(2);
        return mqttConnectOptions;
    }

    @Bean
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        factory.setConnectionOptions(getMqttConnectOptions());
        return factory;
    }

    @Bean
    @ServiceActivator(inputChannel = "mqttOutboundChannel")
    public MessageHandler mqttOutbound() {
        MqttPahoMessageHandler messageHandler =  new MqttPahoMessageHandler(clientId, mqttClientFactory());
        messageHandler.setAsync(true);
        messageHandler.setDefaultTopic(defaultTopic);
        return messageHandler;
    }

    @Bean
    public MessageChannel mqttOutboundChannel() {
        return new DirectChannel();
    }
  }  
  

여기에 뭔가 잘못이며, 당신은이 클래스는 수동으로 패키지를 안내하는 소스 코드가 필요 메시지 처리 핸들러가 직접 org.springframework.messaging.MessageHandler을 달성하는 데 필요한입니다 여기 읽을 필요가 없습니다에 messageHandler 내 코드 워드를 복사한다면 라인에이 패키지를 가져

@Component
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MsgWriter {

    void sendToMqtt(String data);
    void sendToMqtt(String payload,@Header(MqttHeaders.TOPIC) String topic);
    void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, String payload);

}

이것은 당신이 라인에 전화를 직접 메시지를 보낼 필요로 할 때, 메시징 인터페이스입니다 몇 가지 오버로드 된 방법을 제공 또는 데이터 페이로드 메시지 내용 보내는
당신이 당신의 자신의 유연성, 당신은 또한 기본 테마를 사용하여 정의 할 수있는, 주제는 메시지의 제목이 전송됩니다 0이 메시지를받지 못한 가입자는 메시지가 손실됩니다 다시 전송되지 않습니다 나타냅니다 구성 파일의 주제는 QoS를 0,1,2으로 메시지 처리에 대한 MQTT 여러 메커니즘입니다, 1 재에 그 시도를 나타냅니다 테스트 메시지가 수신 될 때까지하지만, 가입자가 메시지 가입자가받을 수 있다는 것을 보장하기 위해 무거운 행동 이상 2에 비해, 반복 메시지를 수신에 그 이어질 수
물론,이 세 가지 모드 성능이 0이 최고 = 확실히 최악의이 같은, QoS를하지 않습니다, 나는 그들을 더 이것에 대해 알아 갈 수있는 관심이 반복되지 않습니다 있습니다

위는 당신이 갈 수 있습니다, 메시지를 보낼 완료 // localhost를 : HTTP : 61680은 / 콘솔 / 메시지의 기록에서 index.html을 보면, 여기에 내가 인터페이스 방법은 sendToMqtt 메시지를 보내 호출 썼다

 

 

내가 그렇게 위 두 가지 주제에 가입하기 때문에 당신은이 개 테마를받을 참조, 나는 두 가지를했다, 난 그냥 메시지의 주제도 뉴스가 제공 볼 수 있도록 너무 열려 게시

 

 

소비자가없는 경우 작성하지 가입자가있는 경우 지금 나에게 일곱 메시지를 표시, 전송이 성공적으로 입증

그리고 가입자는 내가 시작 클래스에 직접 쓸 것, 모든 구성을 사용하지 않은 편의를 위해,이

@SpringBootApplication
@EnableAutoConfiguration
public class MytestApplication {

    public static void main(String[] args) {
        SpringApplication.run(MytestApplication.class, args);
    }


    @Value("${spring.mqtt.server.id}")
    private String serverId;

    @Bean
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        factory.setServerURIs("tcp://localhost:61613");
        factory.setUserName("admin");
        factory.setPassword("password");
        return factory;
    }

//     consumer 订阅者监听消息

    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p + ", received from MQTT")
                .handle(logger())
                .get();
    }

    private LoggingHandler logger() {
        LoggingHandler loggingHandler = new LoggingHandler("INFO");
        loggingHandler.setLoggerName("siSample");
        return loggingHandler;
    }

    @Bean
    public MessageProducerSupport mqttInbound() {
        MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(serverId,
                mqttClientFactory(), "too");
        adapter.setCompletionTimeout(5000);
        adapter.setConverter(new DefaultPahoMessageConverter());
        adapter.setQos(1);
        return adapter;
    }

}

여기서 당신은 너무 주제뿐만 아니라 보낸 사람의 아이디 ID입니다 내가 머리에 가입, 가입 스레드를 지정할 수 있으며, 같은 파티에 가입하지 않은
사용자는 콘솔 메시지를 인쇄 된 찾을 수 있습니다, 프로젝트를 다시 시작 메시지를 보내려면

가입자를 대신하여 성공적으로 동시에 메시지를 수신에

 

 

또한, 메시지 가입자 녹음을 표시 지금까지 완전한 메시징 및 구독 도움말 새로운 사람들 시작하기 바라고, 완전한 비교적 간단하지만, 문제가 발생하기 쉬운 매우 부주의입니다

추천

출처www.cnblogs.com/xuxiaobai13/p/11846865.html