spring boot 简单的使用ActiveMQ

ActiveMQ

1. 下载windows办的activeMQ后,在以下目录可以启动:


spring boot 简单的使用ActiveMQ_第1张图片
启动

2 我们可以通过http://localhost:8161(http://127.0.0.1:8161/)访问管理页面,通过tcp://localhost:61616来连接消息服务器,用到的用户名和密码都在以下文件中(默认为admin=admin)所以用户名和密码都是admin


spring boot 简单的使用ActiveMQ_第2张图片
用户名和密码

这是启动ActiveMq的步骤,下面是spring boot的对ActiveMQ简单使用


1 添加依賴:(备注:不知道是不是spring boot 2.04版本;activeMq-pool不要使用5.0.7版,建议使用5.14.4版或以上;错误:spring boot org.apache.activemq.pooledConnectionFactory.setConnectionFactory(connectionFactory);)


spring boot 简单的使用ActiveMQ_第3张图片
pool依賴:池;



2 注入bean:

@Configuration

@EnableJms

public class ActiveMqConfig {

/**

    * 点对点

    * @return

    * */

    @Bean

    public ActiveMQQueuequeue() {

return new ActiveMQQueue("promoteAct");

    }

/**

    * 发布/订阅

    * @return

    */

    @Bean

    public Topictopic(){

return new ActiveMQTopic("zh-topic");

    }



3 .写消息生产者(使用定时做测试;如果需要,可以使用spring mvc 的模式进行配置)

    1)主题方式:

package com.example.demo.mq;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jms.annotation.JmsListener;

import org.springframework.jms.core.JmsMessagingTemplate;

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Component;

import javax.jms.Queue;

import javax.jms.Topic;

@Component

public class TopicProducer {

@Autowired

    private JmsMessagingTemplatejmsMessagingTemplate;

    @Autowired

    private Queuequeue;

    @Autowired

    private Topictopic;

    /***

    * 服务端发送者 Topic

* */

    @Scheduled(fixedDelay =2000)// 每2s执行1次

    public void send() {

int num = (int) (Math.random()*100);

        this.jmsMessagingTemplate.convertAndSend(this.topic, "hello word,activeMQ"+num);

    }

@JmsListener(destination="out.topic")

public void consumerMessage(String text){

int num = (int) (Math.random()*100);

        System.out.println("从out.topic 主题收到的回复为:"+text+" : " +num);

    }

}



2)队列模式的生产者:

    package com.example.demo.mq;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jms.annotation.JmsListener;

import org.springframework.jms.core.JmsMessagingTemplate;

import org.springframework.messaging.handler.annotation.SendTo;

import org.springframework.scheduling.annotation.EnableScheduling;

import org.springframework.scheduling.annotation.Scheduled;

import org.springframework.stereotype.Component;

import javax.jms.Queue;

@Component

@EnableScheduling

public class PromoteActProducer {

@Autowired

    private JmsMessagingTemplatejmsMessagingTemplate;

    @Autowired

    private Queuequeue;

    @Scheduled(fixedDelay =2000)// 每2s执行1次

    public void send() {

int num = (int) (Math.random()*100);

        this.jmsMessagingTemplate.convertAndSend(this.queue, "hello,activeMQ"+num);

    }

@JmsListener(destination="out.queue")

public void consumerMessage(String text){

int num = (int) (Math.random()*100);

        System.out.println("从out.queue队列收到的回复报文为:"+text +num);

    }

}




4 :消息接受者

    1)主题方式:

    package com.example.demo.mq;

import org.springframework.jms.annotation.JmsListener;

import org.springframework.messaging.handler.annotation.SendTo;

import org.springframework.stereotype.Component;

@Component

public class TopicConsumer {

/**

    * 客户端消费 Topic

    * @param consumer

    */

    @JmsListener(destination ="zh-topic")

@SendTo("out.topic")

public StringreceiveQueue(String consumer) {

int num = (int) (Math.random()*100);

        System.out.println(consumer+":"+num+"  topic主题 消息已经接收了");

        return consumer+" " + num +"  topic 主题发送消息了 " ;

    }

}


2)队列方式:

package com.example.demo.mq;

import org.springframework.jms.annotation.JmsListener;

import org.springframework.messaging.handler.annotation.SendTo;

import org.springframework.stereotype.Component;

@Component

public class PromoteConsumer {

/**

    * 客户端消费

    * @param text

    * JmsListener:监听器;destination:目的地

    * SendTo 发送消息

    */

    @JmsListener(destination ="promoteAct")

@SendTo("out.queue")

public StringreceiveQueue(String text) {

int num = (int) (Math.random()*100);

        System.out.println("Consumer2收到的报文为:"+text);

        return "return message:"+text+num;

    }

}





5 结果:

后台输出:

spring boot 简单的使用ActiveMQ_第4张图片
这是主题的结果,队列也是一样的

activeMq 的显示结果:


spring boot 简单的使用ActiveMQ_第5张图片
这是activeMq的主题和队列



你可能感兴趣的:(spring boot 简单的使用ActiveMQ)