成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring boot 集成 ActiveMQ

Donne / 3006人閱讀

摘要:安裝到官方網(wǎng)站下載最新的的安裝包,并解壓到本地目錄下,下載鏈接如下。修改消費(fèi)者使用配置消費(fèi)者監(jiān)聽的隊(duì)列,其中是接收到的消息收到的報(bào)文為接收到的消息重新執(zhí)行

安裝ActiveMQ

到Apache官方網(wǎng)站下載最新的ActiveMQ的安裝包,并解壓到本地目錄下,下載鏈接如下:http://activemq.apache.org/do...。

進(jìn)入bin 目錄,如果我們是32位的機(jī)器,就雙擊 win32 目錄下的 activemq.bat,如果是64位機(jī)器,則雙擊 win64 目錄下的 activemq.bat ,運(yùn)行結(jié)果如下:
成功之后在瀏覽器輸入 http://127.0.0.1:8161/ 地址,可以看到 ActiveMQ 的管理頁面,用戶名和密碼默認(rèn)都是 admin

Spring Boot 整合 ActiveMQ

工程結(jié)構(gòu)

添加 pom 依賴


    org.springframework.boot
    spring-boot-starter-activemq

config 配置

# activemq
spring.activemq.broker-url=tcp://localhost:61616
spring.activemq.user=admin
spring.activemq.password=admin
#默認(rèn)為true表示使用內(nèi)存的activeMQ,不需要安裝activeMQ server
spring.activemq.in-memory=true
 
#如果此處設(shè)置為true,需要加如下的依賴包
#          org.apache.activemq
#          activemq-pool
# 否則會自動配置失敗,報(bào)JmsMessagingTemplate注入失敗
spring.activemq.pool.enabled=false
隊(duì)列模式

創(chuàng)建 消息提供者:Producer.java

import javax.jms.Destination;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;
 
@Service
public class Producer {
 
    @Autowired // 也可以注入JmsTemplate,JmsMessagingTemplate對JmsTemplate進(jìn)行了封裝
    private JmsMessagingTemplate jmsTemplate;
 
    // 發(fā)送消息,destination是發(fā)送到的隊(duì)列,message是待發(fā)送的消息
    public void sendMessage(Destination destination, final String message){
        jmsTemplate.convertAndSend(destination, message);
    }
}

創(chuàng)建消費(fèi)者一: Consumer.java

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
 
@Component
public class Consumer {
 
    // 使用JmsListener配置消費(fèi)者監(jiān)聽的隊(duì)列,其中text是接收到的消息
    @JmsListener(destination = "mytest.queue")
    public void receiveQueue(String text) {
        System.out.println("Consumer收到的報(bào)文為:"+text);
    }
}

創(chuàng)建消費(fèi)者二:Consumer1 .java

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
 
@Component
public class Consumer1 {
 
    // 使用JmsListener配置消費(fèi)者監(jiān)聽的隊(duì)列,其中text是接收到的消息
    @JmsListener(destination = "mytest.queue")
    public void receiveQueue(String text) {
 
        System.out.println("Consumer1收到的報(bào)文為:"+text);
    }
}

測試

創(chuàng)建一個(gè) ActivceMQQueue 對象,表示隊(duì)列模式,下面會介紹主題模式。

import org.apache.activemq.command.ActiveMQQueue;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
import javax.jms.Destination;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class JmsApplicationTests {
 
    @Autowired
    private Producer producer;
 
    @Test
    public void contextLoads() {
 
        Destination destination = new ActiveMQQueue("mytest.queue");
 
        for(int i=0; i<100; i++){
            producer.sendMessage(destination, "myname is chhliu!!!");
        }
    }
}

雙向隊(duì)列

使用 @SendTo 注解可以將方法的返回值重新放入到消息隊(duì)列中,供其他消費(fèi)者消費(fèi)

這里我們修改 Consumer1.java 增加注解 @SendTo

public class Consumer1 {
 
    // 使用JmsListener配置消費(fèi)者監(jiān)聽的隊(duì)列,其中text是接收到的消息
    @JmsListener(destination = "mytest.queue")
    @SendTo("out.queue")
    public String receiveQueue(String text) {
 
        System.out.println("Consumer1收到的報(bào)文為:"+text);
 
        return "return message" + text;
    }
 
    @JmsListener(destination = "out.queue")
    public void outQueue(String text){
        System.out.println("Consumer1 outQueue:"+text);
    }
}
主題模式

配置文件中需要增加

# 啟用 topic 模式
spring.jms.pub-sub-domain=true

修改 Consumer1 增加對主題的監(jiān)聽

import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;
 
@Component
public class Consumer1 {
 
    // 使用JmsListener配置消費(fèi)者監(jiān)聽的隊(duì)列,其中text是接收到的消息
    @JmsListener(destination = "mytest.queue")
    @SendTo("out.queue")
    public String receiveQueue(String text) {
 
        System.out.println("Consumer1 收到的報(bào)文為:"+text);
 
        return "return message" + text;
    }
 
    @JmsListener(destination = "out.queue")
    public void outQueue(String text){
        System.out.println("Consumer1 outQueue:"+text);
    }
 
    @JmsListener(destination = "mytest.topic")
    public void topicQueue(String text){
        System.out.println("Consumer 接收到的 topic 消息:" + text);
    }
}

修改測試類

增加發(fā)送主題消息

import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
 
import javax.jms.Destination;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class JmsApplicationTests {
 
    @Autowired
    private Producer producer;
 
    @Test
    public void contextLoads() {
 
        Destination destination = new ActiveMQQueue("mytest.queue");
        Destination topicDestination = new ActiveMQTopic("mytest.topic");
 
        for(int i=0; i<10; i++){
            producer.sendMessage(destination, "Queue Message......");
            producer.sendMessage(topicDestination, "Topic Message!!!");
        }
    }
}

消息的結(jié)果為:

沒有出現(xiàn) 隊(duì)列消息。此時(shí)需要修改我們的監(jiān)聽,指定出是哪種類型的

增加配置類

這個(gè)配置類沒有在那個(gè)工程圖上面出現(xiàn),添加一個(gè)類就好。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;
 
import javax.jms.ConnectionFactory;
 
@Configuration
@EnableJms
public class JmsConfig {
    @Bean
    public JmsListenerContainerFactory topicListenerFactory(ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setPubSubDomain(true);
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }
 
    @Bean
    public JmsListenerContainerFactory queueListenerFactory(ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setPubSubDomain(false);
        factory.setConnectionFactory(connectionFactory);
        return factory;
    }
 
}

修改消費(fèi)者 Consumer1.java

import org.springframework.jms.annotation.JmsListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Component;
 
@Component
public class Consumer1 {
 
    // 使用JmsListener配置消費(fèi)者監(jiān)聽的隊(duì)列,其中text是接收到的消息
    @JmsListener(destination = "mytest.queue", containerFactory = "queueListenerFactory")
    @SendTo("out.queue")
    public String receiveQueue(String text) {
 
        System.out.println("Consumer1 收到的報(bào)文為:"+text);
 
        return "return message" + text;
    }
 
    @JmsListener(destination = "out.queue", containerFactory = "queueListenerFactory")
    public void outQueue(String text){
        System.out.println("Consumer1 outQueue:"+text);
    }
 
    @JmsListener(destination = "mytest.topic", containerFactory = "topicListenerFactory")
    public void topicQueue(String text){
        System.out.println("Consumer 接收到的 topic 消息:" + text);
    }
}

重新執(zhí)行

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77730.html

相關(guān)文章

  • Spring Boot 參考指南(消息傳遞)

    摘要:還自動配置發(fā)送和接收消息所需的基礎(chǔ)設(shè)施。支持是一個(gè)輕量級的可靠的可伸縮的可移植的消息代理,基于協(xié)議,使用通過協(xié)議進(jìn)行通信。 32. 消息傳遞 Spring框架為與消息傳遞系統(tǒng)集成提供了廣泛的支持,從使用JmsTemplate簡化的JMS API到使用完整的基礎(chǔ)設(shè)施異步接收消息,Spring AMQP為高級消息隊(duì)列協(xié)議提供了類似的特性集。Spring Boot還為RabbitTempla...

    Doyle 評論0 收藏0
  • 慕課網(wǎng)_《Java消息中間件》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。這個(gè)時(shí)候,可以啟動多臺積分系統(tǒng),來同時(shí)消費(fèi)這個(gè)消息中間件里面的登錄消息,達(dá)到橫向擴(kuò)展的作用。 時(shí)間:2017年07月22日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程安排 Java...

    twohappy 評論0 收藏0
  • SpringBoot ActiveMQ 整合使用

    摘要:介紹它是出品,最流行的,能力強(qiáng)勁的開源消息總線。是一個(gè)完全支持和規(guī)范的實(shí)現(xiàn),盡管規(guī)范出臺已經(jīng)是很久的事情了,但是在當(dāng)今的應(yīng)用中間仍然扮演著特殊的地位。相關(guān)文章整合使用整合使用關(guān)注我轉(zhuǎn)載請務(wù)必注明原創(chuàng)地址為安裝同之前一樣,直接在里面玩吧。 showImg(https://segmentfault.com/img/remote/1460000012996066?w=1920&h=1281)...

    gaara 評論0 收藏0
  • JMS 在 SpringBoot 中的使用

    摘要:本文主要講述消息服務(wù)在中的使用。所以需要一個(gè)監(jiān)聽容器工廠的概念,即接口,它會引用上面創(chuàng)建好的與的連接工廠,由它來負(fù)責(zé)接收消息以及將消息分發(fā)給指定的監(jiān)聽器。為了消費(fèi)消息,訂閱者必須保持運(yùn)行的狀態(tài)。 JMS 在 SpringBoot 中的使用 摘要:本文屬于原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請保留出處:https://github.com/jasonGeng88/blog> 本文所有服務(wù)均采用doc...

    Michael_Ding 評論0 收藏0
  • 使用Spring/Spring Boot集成JMS的陷阱

    摘要:本文旨在指出中集成的一些性能陷阱,在另一篇文章各組件詳解里有組件介紹及如何正確使用的內(nèi)容。因此的做法會大大降低性能,并且將大部分的時(shí)間都花在反復(fù)重建這些對象上。提供的可以讓使用避免頻繁創(chuàng)建的問題。至于使用的性能測試則留給同學(xué)自己做了。 Github 本文旨在指出Spring/Spring Boot中集成JMS的一些性能陷阱,在另一篇文章Spring JMS各組件詳解里有Spring J...

    xcold 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<