基於Redisson的Redis發佈訂閱傳對象[消息隊列]

1、實體類實現

Serializable 接口

2、發佈消息

package com.ahies.stm.app.synthesizes.aifind.controller;


import com.ahies.stm.app.synthesizes.aifind.entity.AifindHistory;
import com.ahies.stm.app.util.ResponseResult;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.redisson.codec.SerializationCodec;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;
import com.ahies.stm.app.base.BaseController;

/**
 * <p>
 * 智能找人歷史記錄 前端控制器
 * </p>
 *
 * @author zhu
 * @since 2019-12-17
 */
@RestController
@CrossOrigin
@RequestMapping("/synthesizes/aifind/aifindHistory")
public class AifindHistoryController extends BaseController {
    
    @Autowired
    RedissonClient redissonClient;


    @RequestMapping("/push")
    public ResponseResult<AifindHistory> push() {
        // 保存數據到數據庫
        //保存xml 文件

        //發佈到rediss
        RTopic topic1 = redissonClient.getTopic("dw", new SerializationCodec());
        AifindHistory aifindHistory = new AifindHistory();
        aifindHistory.setBornTime("2222");
        topic1.publish(aifindHistory);

        return null;

    }


}

 

3、訂閱消息

package com.ahies.stm.app.hikvision.init;

import com.ahies.stm.app.hikvision.queueHandler.AiFindQueueHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @Description
 * @Date 2019/12/9 20:30
 * @Author zsj
 * 實現CommandLineRunner  接口 程序啓動後執行
 *      開啓一個線程 交給線程池執行
 */

@Component
@Order(3)
public class AiFindQueueRunner implements CommandLineRunner {

    public static ExecutorService queueThreadPool = Executors.newFixedThreadPool(1);
    @Autowired
    AiFindQueueHandler aiFindQueueHandler;


    @Override
    public void run(String... args) throws Exception {
        queueThreadPool.execute(aiFindQueueHandler);

    }
}

 

線程類如下

package com.ahies.stm.app.hikvision.queueHandler;

import com.ahies.stm.app.synthesizes.aifind.entity.AifindHistory;
import lombok.Getter;
import lombok.Setter;
import org.redisson.api.RScoredSortedSet;
import org.redisson.api.RTopic;
import org.redisson.api.RedissonClient;
import org.redisson.api.listener.MessageListener;
import org.redisson.codec.SerializationCodec;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @Description 
 * @Date 2019/12/9 20:32
 * @Author zsj
 */
@Getter
@Setter
@Component
public class AiFindQueueHandler implements Runnable {
    @Autowired
    RedissonClient redissonClient;

    @Override
    public void run() {
        //添加topic監聽
        RTopic topic = redissonClient.getTopic("dw",new SerializationCodec());
        topic.addListener(AifindHistory.class, new MessageListener<AifindHistory>() {
            @Override
            public void onMessage(CharSequence charSequence, AifindHistory aifindHistory) {
                System.out.println("onMessage:"+charSequence+"; Thread: "+Thread.currentThread().toString());
                System.out.println(aifindHistory.getBornTime());
            }
        });


    }
}

 

發佈了231 篇原創文章 · 獲贊 46 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章