SpringBoot3+國產(chǎn)FolkMQ!五行代碼搞定消息中間件
FolkMQ 是一個(gè) “純血國產(chǎn)” 的消息中間件。支持內(nèi)嵌、單機(jī)、集群、多重集群等多種部署方式。
- 內(nèi)嵌版,就相當(dāng)于 H2 或 SQLite 數(shù)據(jù)庫一樣。給一些小項(xiàng)目(或者特別需求)帶來了方便。
 - 大項(xiàng)目,則可以使用獨(dú)立部署的 “單機(jī)版” 或 “集群版”
 
內(nèi)嵌個(gè)消息中間件,體積會(huì)不會(huì)太大啦??。〔粫?huì),才7Mb。好小的!
1、了解 FolkMQ 內(nèi)嵌版
FolkMQ 內(nèi)嵌版(帶 Web 控制臺(tái)界面的),體積增加 7Mb,就可以附加完整消息中間件的能力嘍。
比如你在用 “諾依” 開發(fā)個(gè)小項(xiàng)目,需要消息中間件,但是又不想獨(dú)立部署。這就很適合呢!關(guān)注公眾號(hào):碼猿技術(shù)專欄,回復(fù)關(guān)鍵詞:1111 獲取阿里內(nèi)部Java性能調(diào)優(yōu)手冊(cè)!
- 內(nèi)嵌版與單機(jī)板,功能一模一樣
 - 控制臺(tái)界面是基于 Solon 框架 開發(fā)的,非常小巧。(可以用宿主項(xiàng)目的端口,也可以獨(dú)立端口)
 - 可以內(nèi)嵌到 jFinal,Solon,SpringBoot2,SpringBoot3,Vert.X 等框架里
 
說起來 Solon 真是中間件的控制臺(tái)良配,又小又強(qiáng)又可以內(nèi)嵌。太愛了!
2、怎么集成吶?
此例,我們的控制臺(tái)使用宿主項(xiàng)目的 HTTP 端口。所以需要與 SpringBoot2 的 Servlet 能力對(duì)接。
a) 引入兩個(gè)包
依賴包  | 說明  | 
solon.web.servlet  | 負(fù)責(zé)與 SpringBoot2 的 Servlet 能力對(duì)接,為控制臺(tái)提供支持  | 
folkmq-embedded  | 我們的主角,F(xiàn)olkMQ 內(nèi)嵌版  | 
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon.web.servlet.jakarta</artifactId>
    <version>2.8.3</version>
</dependency>
<dependency>
    <groupId>org.noear</groupId>
    <artifactId>folkmq-broker-embedded</artifactId>
    <version>1.7.1</version>
</dependency>b) 添加一個(gè)配置類 FolkMqConfig,就集成好了
專門安排它一個(gè)包名“folkmq”,可以縮小 solon 的掃描范圍。因?yàn)?solon 也是個(gè)容器型的框架嘛(只是比較小巧)。
package demoapp.folkmq;
@Configuration
publicclassFolkMqConfig{
    @PostConstruct
    publicvoidstart(){
        //啟動(dòng) solon
        Solon.start(FolkMqConfig.class, newString[]{});
    }
    @PreDestroy
    publicvoidstop(){
        if (Solon.app() != null) {
            //停止 solon(根據(jù)配置,可支持兩段式安全停止)
            Solon.stopBlock(false, Solon.cfg().stopDelay());
        }
    }
    @Bean
    public FilterRegistrationBean folkmqAdmin(){
        //通過 Servlet Filter 實(shí)現(xiàn) http 能力對(duì)接
        FilterRegistrationBean<SolonServletFilter> filter = new FilterRegistrationBean<>();
        filter.setName("SolonFilter");
        filter.addUrlPatterns("/folkmq/*");
        filter.setFilter(new SolonServletFilter());
        return filter;
    }
}c) 然后,再加個(gè)配置文件 folkmq.yml 來控制它
更多的配置,可以見官網(wǎng)的:
https://folkmq.noear.org/article/773
# 如果使用 servelt 則使用與 sprongboot 相同的等口
server.port:8080
# 避免與其它 token 沖突
server.session.state.jwt.name:FOLKMQ-TOKEN
# 消息控制臺(tái)賬號(hào)密碼
folkmq.admin:admin
# 消息傳輸協(xié)議(tcp 或 ws)
folkmq.schema:tcp
# 消息傳輸端口(默認(rèn)為 server.port + 10000)
folkmq.transport.port:03、看看內(nèi)嵌的效果
項(xiàng)目運(yùn)行后,可以通過 /folkmq/ 來訪問控制臺(tái)。
圖片
4、然后測(cè)試下
消息端口,是控制臺(tái)端口 + 10000。測(cè)試,我們就發(fā)10條普通消息試試。
publicclassClientTest{
    publicstaticvoidmain(String[] args)throws Exception {
        MqClient client = FolkMQ.createClient("folkmq://localhost:18080")
                .nameAs("demoapp")
                .connect();
        //訂閱消息
        client.subscribe("demo.topic", message -> {
            System.out.println(message);
        });
        for (int i = 0; i < 10; i++) {
            //發(fā)布消息
            client.publish("demo.topic", new MqMessage("hello" + i));
        }
    }
}測(cè)試效果:
圖片
5、完整的示例代碼
https://gitee.com/noear/folkmq-embedded-examples/tree/main/folkmq-embedded-springboot3















 
 
 












 
 
 
 