Spring Boot 整合ActiveMQ的過程

weixin_34116110發表於2017-12-21
  1. 安裝ActiveMQ伺服器,(也可以不安裝,如果不安裝,會使用記憶體mq)
  2. 構建Spring boot專案,增加依賴項,只需要新增這一項即可
<!-- 新增acitivemq依賴 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
  1. 增加Application類
@SpringBootApplication
@EnableScheduling //使用定時任務傳送訊息
public class MqTestApplication {
    public static void main(String[] args) {
        SpringApplication.run(MqTestApplication.class, args);
    }
}
  1. 配置application.yml
spring:
  activemq:
    broker-url: tcp://127.0.01:61616
    packages:
      trust-all: true
  1. 構建一個資料Model,可以傳送和消費的資料型別有: String, byte array, Map<String,?>, Serializable object.
// 如果傳送的訊息是一個物件,必須implements Serializable介面
public class TModel implements Serializable {
    private static final long serialVersionUID = -921008687184331557L;

    private int count;

    public TModel(int count) {
        this.count = count;
    }

    @Override
    public String toString() {
        return "TModel [count=" + count + "]";
    }

}
  1. 構建Producer
@Component
public class Producer {
    // 在Producer中注入JmsTemplate,我們可以通過這個template傳送訊息
    private final JmsTemplate jmsTemplate;
    private int count = 0;

    @Autowired
    public Producer(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

    // 這裡使用Spring Boot的定時任務傳送訊息
    @Scheduled(fixedRate = 1000)
    public void create() {
        // 使用convertAndSend傳送訊息
        jmsTemplate.convertAndSend("queue1", new TModel(count++));
    }
}
  1. 構建Consumer
@Component
public class Consumer {
    @JmsListener(destination = "queue1")
    public void comsume(TModel content) {
        System.out.println("recive message from queue1 [" + content + "]");
    }
}

特別備註:如果我們的生產者和消費者在不同的Module中時,最好將要消費的資料抽象成公共Module.程式是通過Serializable來序列化和反序列化物件的。必須保證生產者和消費者的物件模型的serialVersionUID是一致的。

專案地址: https://github.com/ldwqh0/active-mq-spring.git

相關文章