欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過Docker啟動Solace并在Spring?Boot通過JMS整合Solace的操作方法

 更新時間:2023年01月18日 09:32:18   作者:南瓜慢說  
本文將介紹如何在Spring中使用,雖然代碼使用的是Spring Boot,但并沒有使用相關(guān)starter,跟Spring的整合一樣,可通用,JMS是通過的消息處理框架,可以深入學(xué)習(xí)一下,不同的MQ在JMS的整合上都是類似的,感興趣的朋友跟隨小編一起看看吧

1 簡介

Solace是一個強大的實時性的事件驅(qū)動消息隊列。本文將介紹如何在Spring中使用,雖然代碼使用的是Spring Boot,但并沒有使用相關(guān)starter,跟Spring的整合一樣,可通用。JMS是通過的消息處理框架,可以深入學(xué)習(xí)一下,不同的MQ在JMS的整合上都是類似的。

2 通過Docker啟動Solace

有兩種方式試用Solace,一種是通過Docker來啟動,另一種是使用Cloud版本,但Cloud版本有試用期限,我們使用Docker來啟動吧。

先下載鏡像:

$ docker pull solace/solace-pubsub-standard:9.13.0.16

然后通過以下命令啟動:

$ docker run -d -p 8080:8080 -p 55554:55555 -p 8008:8008 -p 1883:1883 -p 8000:8000 -p 5672:5672 -p 9000:9000 -p 2222:2222 --shm-size=2g --env username_admin_globalaccesslevel=admin --env username_admin_password=admin --name=solace solace/solace-pubsub-standard:9.13.0.16

這里端口改為55554,是因為Mac的原因。

然后便可以訪問來登陸管理界面:http://localhost:8080/

用戶名密碼為:admin/admin

登陸后可以看到如下界面,Solace按VPN來管理隊列,VPN有點像分組,比如某個業(yè)務(wù)線使用某個VPN。

我們在default的VPN上創(chuàng)建一個Queue,名為pkslow-queue

其它設(shè)置如下:

接著在該Queue上創(chuàng)建Topic:

創(chuàng)建完成后,我們可以直接測試一下:

可以Publish到Topic或Queue,也可以從其中一個Subscribe。

完成以上設(shè)置后,我們就可以在Spring Boot中整合了。

3 Spring Boot JMS整合Solace

3.1 發(fā)送消息

我們是通過JmsTemplate來發(fā)送消息的,而JmsTemplate需要連接到MQ,就需要一個ConnectionFactory,這個Factory是帶著MQ的一些連接信息。配置代碼如下:

@Configuration
public class SolacePubConfig {

    private final SolaceProperties solaceProperties;

    public SolacePubConfig(SolaceProperties solaceProperties) {
        this.solaceProperties = solaceProperties;
    }

    @Bean("connectionFactory")
    public ConnectionFactory connectionFactory() throws Exception {
        Properties env = new Properties();
        env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "com.solacesystems.jndi.SolJNDIInitialContextFactory");
        env.put(InitialContext.PROVIDER_URL, solaceProperties.getBrokerUrl());
        env.put(SupportedProperty.SOLACE_JMS_VPN, solaceProperties.getVpn());
        env.put(InitialContext.SECURITY_PRINCIPAL, solaceProperties.getUsername());
        env.put(InitialContext.SECURITY_CREDENTIALS, solaceProperties.getPassword());
        return SolJmsUtility.createConnectionFactory(env);
    }

    @Bean
    public CachingConnectionFactory cachingConnectionFactory(ConnectionFactory connectionFactory) {
        CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(connectionFactory);
        cachingConnectionFactory.setSessionCacheSize(10);
        return cachingConnectionFactory;
    }

    @Bean
    public JmsTemplate pubJmsTemplate(CachingConnectionFactory cachingConnectionFactory) {
        JmsTemplate jmsTemplate = new JmsTemplate(cachingConnectionFactory);
        jmsTemplate.setPubSubDomain(true);
        jmsTemplate.setExplicitQosEnabled(true);
        jmsTemplate.setDeliveryPersistent(true);
        jmsTemplate.setDefaultDestinationName(solaceProperties.getDefaultPubDestinationName());
        return jmsTemplate;
    }
}

生成JmsTemplate后,就可以引用并發(fā)送消息了:

@RestController
@RequestMapping("/solace")
public class SolaceTestController {
    private final JmsTemplate pubJmsTemplate;
    private final SolaceProperties solaceProperties;

    public SolaceTestController(JmsTemplate pubJmsTemplate, SolaceProperties solaceProperties) {
        this.pubJmsTemplate = pubJmsTemplate;
        this.solaceProperties = solaceProperties;
    }

    @GetMapping
    public String send() {
        pubJmsTemplate.send(solaceProperties.getDefaultPubDestinationName(), session -> session.createTextMessage("www.pkslow.com"));
        pubJmsTemplate.send(session -> session.createTextMessage("Larry Deng"));
        return "OK";
    }
}

用到的屬性配置如下:

server.port=8083

pkslow.solace.brokerUrl=smf://127.0.0.1:55554
pkslow.solace.vpn=default
pkslow.solace.username=default
pkslow.solace.password=default
pkslow.solace.defaultPubDestinationName=pkslow-topic
pkslow.solace.defaultSubDestinationName=pkslow-queue
@Configuration
@ConfigurationProperties(prefix = "pkslow.solace")
@Setter
@Getter
public class SolaceProperties {
    private String brokerUrl;
    private String vpn;
    private String username;
    private String password;
    private String defaultPubDestinationName;
    private String defaultSubDestinationName;
}

3.2 接收消息

我們通過MessageListenerContainer來接收消息,MessageListenerContainer也需要一個ConnectionFactory,也有MQ的連接信息。還需要一個MessageListener,用來定義如何處理消息。我們的配置如下:

@Configuration
@Slf4j
public class SolaceSubConfig {
    private final SolaceProperties solaceProperties;

    public SolaceSubConfig(SolaceProperties solaceProperties) {
        this.solaceProperties = solaceProperties;
    }

    @Bean
    public SingleConnectionFactory singleConnectionFactory(@Qualifier("connectionFactory") ConnectionFactory targetConnectionFactory) {
        return new SingleConnectionFactory(targetConnectionFactory);
    }

    @Bean
    public MessageListener messageListener() {
        return message -> {
            try {
                log.info("Received message " + ((TextMessage) message).getText() + " on destination: " +
                        message.getJMSDestination().toString());
            } catch (JMSException ex) {
                throw new RuntimeException(ex);
            }
        };
    }
    @Bean
    public MessageListenerContainer messageListenerContainer(SingleConnectionFactory singleConnectionFactory, MessageListener messageListener) {
        DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
        container.setConnectionFactory(singleConnectionFactory);
        container.setDestinationName(solaceProperties.getDefaultSubDestinationName());
        container.setMessageListener(messageListener);

        return container;
    }
}

這里@Qualifier("connectionFactory") ConnectionFactory targetConnectionFactory復(fù)用了在SolacePubConfig創(chuàng)建的對象。

3.3 測試

發(fā)送GET請求就可以觸發(fā)發(fā)送了:

GET http://localhost:8083/solace

我發(fā)了三次,結(jié)果日志如下:

4 代碼

代碼請看GitHub: https://github.com/LarryDpk/pkslow-samples

References:

Docker available image tags

Docker Solace Guide

Spring Solace

到此這篇關(guān)于通過Docker啟動Solace,并在Spring Boot通過JMS整合Solace的文章就介紹到這了,更多相關(guān)Spring Boot通過JMS整合Solace內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java程序控制邏輯—流程控制

    Java程序控制邏輯—流程控制

    這篇文章主要介紹了Java程序的控制邏輯流程控制,流程控制中最基本的就是條件執(zhí)行,也就是說,一些操作只能在某些條件滿足的情況下才執(zhí)行,在一些條件下執(zhí)行某種操作,在另外一些條件下執(zhí)行另外的操作,需要的朋友可以參考一下
    2022-01-01
  • Java switch支持的數(shù)據(jù)類型詳解

    Java switch支持的數(shù)據(jù)類型詳解

    這篇文章主要介紹了Java switch支持的數(shù)據(jù)類型詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java連接redis及基本操作示例

    Java連接redis及基本操作示例

    這篇文章主要介紹了Java連接redis及基本操作,結(jié)合實例形式較為詳細的分析了java針對redis數(shù)據(jù)庫的基本連接、配置及操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04
  • Spring Cloud gateway 網(wǎng)關(guān)如何攔截Post請求日志

    Spring Cloud gateway 網(wǎng)關(guān)如何攔截Post請求日志

    這篇文章主要介紹了Spring Cloud gateway 網(wǎng)關(guān)如何攔截Post請求日志的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java之SpringCloud Eurka注冊錯誤解決方案

    Java之SpringCloud Eurka注冊錯誤解決方案

    這篇文章主要介紹了Java之SpringCloud Eurka注冊錯誤解決方案,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Java RabbitMQ的三種Exchange模式

    Java RabbitMQ的三種Exchange模式

    這篇文章主要介紹了Java RabbitMQ的三種Exchange模式,分別為Direct模式、Fanout模式、Topic模式,Rabbit的Direct Exchange模式是指消息發(fā)送導(dǎo)RouteKey中指定的Queue,Direct模式可以使用Rabbit自帶的Exchange
    2022-08-08
  • 詳解Thymeleaf的三種循環(huán)遍歷方式

    詳解Thymeleaf的三種循環(huán)遍歷方式

    Thymeleaf?是一款用于渲染?XML/XHTML/HTML5?內(nèi)容的模板引擎。本文為大家總結(jié)了Thymeleaf的三種循環(huán)遍歷方式,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-06-06
  • Java構(gòu)造函數(shù)的相互調(diào)用代碼示例

    Java構(gòu)造函數(shù)的相互調(diào)用代碼示例

    這篇文章主要介紹了Java構(gòu)造函數(shù)的相互調(diào)用代碼示例,分享了兩段代碼示例,通過this關(guān)鍵字實現(xiàn)對的構(gòu)造函數(shù)的調(diào)用,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Javafx利用fxml變換場景的實現(xiàn)示例

    Javafx利用fxml變換場景的實現(xiàn)示例

    本文主要介紹了Javafx利用fxml變換場景的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • postman測試post請求參數(shù)為json類型的實例講解

    postman測試post請求參數(shù)為json類型的實例講解

    下面小編就為大家分享一篇postman測試post請求參數(shù)為json類型的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論