package com.loan.msg.config;

import com.loan.msg.service.MessageReceiver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; /**
* @author 周志伟
* @projectname 项目名称: ${project_name}
* @classname: RedisMQConfig
* @description:
* @date 2018/11/13:10:12
*/
@Configuration
public class RedisMQConfig {
/**
* 注入消息监听容器
*
* @param connectionFactory 连接工厂
* @param listenerAdapter 监听处理器1
* @param listenerAdapter 监听处理器2 (参数名称需和监听处理器的方法名称一致,因为@Bean注解默认注入的id就是方法名称)
* @return
*/
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter,
MessageListenerAdapter listenerAdapter2) { RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
//订阅一个叫mq_01 的信道
container.addMessageListener(listenerAdapter, new PatternTopic("mq_01"));
//订阅一个叫mq_02 的信道
container.addMessageListener(listenerAdapter2, new PatternTopic("mq_02"));
//这个container 可以添加多个 messageListener
return container;
} /**
* 消息监听处理器1
*
* @param receiver 处理器类
* @return
*/
@Bean
MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
//给messageListenerAdapter 传入一个消息接收的处理器,利用反射的方法调用“receiveMessage”
return new MessageListenerAdapter(receiver, "receiveMessage"); //receiveMessage:接收消息的方法名称
} /**
* 消息监听处理器2
*
* @param receiver 处理器类
* @return
*/
@Bean
MessageListenerAdapter listenerAdapter2(MessageReceiver receiver) {
//给messageListenerAdapter 传入一个消息接收的处理器,利用反射的方法调用“receiveMessage2”
return new MessageListenerAdapter(receiver, "receiveMessage2"); //receiveMessage:接收消息的方法名称
}
}
package com.loan.msg.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service; /**
* @author 周志伟
* @projectname 项目名称: ${project_name}
* @classname: SendMessageService
* @description:
* @date 2018/11/13:10:11
*/
@Service
public class SendMessageService {
@Autowired
private StringRedisTemplate stringRedisTemplate; /**
* 发布消息
*
* @param channel 消息信道
* @param message 消息内容
*/
public void sendMessage(String channel, String message) {
stringRedisTemplate.convertAndSend(channel, message);
} /**
* 发布消息的方法
*/
public void setStr01() {
this.sendMessage("mq_01", "发送信息内容01");
this.sendMessage("mq_01", "发送信息内容011");
this.sendMessage("mq_02", "发送信息内容02"); }
}
package com.loan.msg.service;

import org.springframework.stereotype.Component;

/**
* @author 周志伟
* @projectname 项目名称: ${project_name}
* @classname: MessageReceiver
* @description:
* @date 2018/11/13:10:14
*/
@Component
public class MessageReceiver {
/**
* 接收消息的方法1
**/
public void receiveMessage(String message) {
System.out.println("receiveMessage接收到的消息:" + message);
} /**
* 接收消息的方法2
**/
public void receiveMessage2(String message) {
System.out.println("receiveMessage2接收到的消息:" + message);
}
}
//向redis里存入数据和设置缓存时间
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS); //val做-1操作
stringRedisTemplate.boundValueOps("test").increment(-1); //根据key获取缓存中的val
stringRedisTemplate.opsForValue().get("test") //val +1
stringRedisTemplate.boundValueOps("test").increment(1); //根据key获取过期时间
stringRedisTemplate.getExpire("test") //根据key获取过期时间并换算成指定单位
stringRedisTemplate.getExpire("test",TimeUnit.SECONDS) //根据key删除缓存
stringRedisTemplate.delete("test"); //检查key是否存在,返回boolean值
stringRedisTemplate.hasKey("546545"); //向指定key中存放set集合
stringRedisTemplate.opsForSet().add("red_123", "1","2","3"); //设置过期时间
stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS); //根据key查看集合中是否存在指定数据
stringRedisTemplate.opsForSet().isMember("red_123", "1") //根据key获取set集合
stringRedisTemplate.opsForSet().members("red_123")

Spring boot 使用Redis 消息队列的更多相关文章

  1. Spring Boot (25) RabbitMQ消息队列

    MQ全程(Message Queue)又名消息队列,是一种异步通讯的中间件.可以理解为邮局,发送者将消息投递到邮局,然后邮局帮我们发送给具体的接收者,具体发送过程和时间与我们无关,常见的MQ又kafk ...

  2. Spring Boot 之 RabbitMQ 消息队列中间件的三种模式

    开门见山(文末附有消息队列的几个基本概念) 1.直接模式( Direct)模式 直白的说就是一对一,生产者对应唯一的消费者(当然同一个消费者可以开启多个服务). 虽然使用了自带的交换器(Exchang ...

  3. Spring Boot使用Redis进行消息的发布订阅

    今天来学习如何利用Spring Data对Redis的支持来实现消息的发布订阅机制.发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦.在我们的例子中,我们将使用StringRedi ...

  4. 【redis】spring boot利用redis的Keyspace Notifications实现消息通知

    前言 需求:当redis中的某个key失效的时候,把失效时的value写入数据库. github: https://github.com/vergilyn/RedisSamples 1.修改redis ...

  5. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  6. 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  7. 几种常见的微服务架构方案——ZeroC IceGrid、Spring Cloud、基于消息队列、Docker Swarm

    微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...

  8. java-spring基于redis单机版(redisTemplate)实现的分布式锁+redis消息队列,可用于秒杀,定时器,高并发,抢购

    此教程不涉及整合spring整合redis,可另行查阅资料教程. 代码: RedisLock package com.cashloan.analytics.utils; import org.slf4 ...

  9. Spring Boot与Redis的集成

    Redis是一个完全开源免费的.遵守BSD协议的.内存中的数据结构存储,它既可以作为数据库,也可以作为缓存和消息代理.因其性能优异等优势,目前已被很多企业所使用,但通常在企业中我们会将其作为缓存来使用 ...

随机推荐

  1. JavaScript--总结三(数组和函数)

    数组 数组的概念: 将多个元素(通常是同一类型)按照一定顺序排列放到一个集合中,这个集合称之为数组---简(一组有序的数据) 数组的作用:可以一次性存储多个数据 数组的定义: 1.通过构造函数创建数组 ...

  2. jQuery 日常笔记

    1.$(document).read(function(){$('p').click(function(){ $('p').hide();})})2.jquery是客户端脚本3.$("p&q ...

  3. linq to entity不识别方法"System.String ToString()"

    将班级id以字符串形式输入如:"1111,1112,1113".数据库里的id为int型,在数据路里找到匹配的相应班级转换成列表.在这里爆出问题:不识别方法"System ...

  4. LeetCode24 两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的 ...

  5. Openstack OCATA 安装环境说明(一) 未完成版本

    1 Openstack简介: 2 实验说明: 3 图例: 4 实验环境说明: 4.1 ) 网卡说明: 网卡名 网 段 连接方式 说明 eth0 10.10.5.0/24 仅主机网络 内部网络自动以IP ...

  6. scaffoldingTools

    脚手架工具 脚手架工具概要(前端工程化的发起者) 脚手架的本质作用:创建项目基础架构.提供项目规范和约定 相同的组织结构 相同的开发规范 相同的模块依赖 相同的工具配置 相同的基础代码 举例:IDE创 ...

  7. 【ASM】asm从共享磁盘复制到本地磁盘中

    将ASM里面的文件copy到文件系统 数据文件存放在ASM里面查看不是很直观,有时候需要把文件从ASM里面copy到文件系统.我记录了一下两种方法,还有一种用AMDU,ODU也可以实现 1. 直接在a ...

  8. 使用yaml配置文件管理资源

    [root@k8s-master ~]# vim nginx-deployment.yaml apiVersion: apps/v1beta2 kind: Deployment metadata: n ...

  9. 缓存淘汰算法 LRU 和 LFU

    LRU (Least Recently Used), 即最近最少使用用算法,是一种常见的 Cache 页面置换算法,有利于提高 Cache 命中率. LRU 的算法思想:对于每个页面,记录该页面自上一 ...

  10. 输入5V,输出5V限流芯片,4A限流,短路保护

    USB限流芯片,5V输入,输出5V电压,限流值可以通过外围电阻进行调节,PWCHIP产品中可在限流范围0.4A-4.8A,并具有过压关闭保护功能. 过压关闭保护: 如芯片:PW1555,USB我们一半 ...