redis實現一個輕量級的高性能消息隊列服務

原理:利用redis的List來做FIFO雙向鏈表,向同一個信息list中存取元素的過程,遵循先進先出原則,redis只支持單消費者。
redis配置請百度,直接上代碼:

1、消息生產者

import com.fbank.dis_common.message.dis.DisResult;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

@RestController
public class RedisMqProducter {

    @Resource(name = "redisTemplate")
    RedisTemplate redis;

    @RequestMapping("/redis/mq/product")
    public Map redisMqProduct(@RequestBody Map<String, String> map) {
        Collection<String> values = map.values();
        if (CollectionUtils.isNotEmpty(values)) {
            Iterator<String> iterator = values.iterator();
            while (iterator.hasNext()) {
                String str = iterator.next();
                Long size = redis.opsForList().rightPush("redisMqList", str);//從右向list添加元素
                System.out.println("向[redisMqList]中推送信息 = [" + str + "], 消息總數爲[" + size + "]條");
            }
        }
        return DisResult.success();
    }
} 

2、消息消費者

import org.apache.commons.lang.StringUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class RedisMqListener {

    @Resource(name = "redisTemplate")
    RedisTemplate redis;

    /**
     * 利用redis的List來做FIFO雙向鏈表,實現一個輕量級的高性能消息隊列服務
     */
    @Scheduled(cron = "0/10 * * * * ?")
    public void execute() {
        //遵循先進先出的原則,右進左出 or 左進右出
        String obj = (String) redis.opsForList().leftPop("redisMqList");
        System.out.println("從redisMqList中獲取到的消息爲 = [" + (StringUtils.isBlank(obj) ? "" : obj) + "]");
    }
}

3、執行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章