Spring boot 使用Redis 消息队列
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 消息队列的更多相关文章
- Spring Boot (25) RabbitMQ消息队列
MQ全程(Message Queue)又名消息队列,是一种异步通讯的中间件.可以理解为邮局,发送者将消息投递到邮局,然后邮局帮我们发送给具体的接收者,具体发送过程和时间与我们无关,常见的MQ又kafk ...
- Spring Boot 之 RabbitMQ 消息队列中间件的三种模式
开门见山(文末附有消息队列的几个基本概念) 1.直接模式( Direct)模式 直白的说就是一对一,生产者对应唯一的消费者(当然同一个消费者可以开启多个服务). 虽然使用了自带的交换器(Exchang ...
- Spring Boot使用Redis进行消息的发布订阅
今天来学习如何利用Spring Data对Redis的支持来实现消息的发布订阅机制.发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦.在我们的例子中,我们将使用StringRedi ...
- 【redis】spring boot利用redis的Keyspace Notifications实现消息通知
前言 需求:当redis中的某个key失效的时候,把失效时的value写入数据库. github: https://github.com/vergilyn/RedisSamples 1.修改redis ...
- 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- 几种常见的微服务架构方案简述——ZeroC IceGrid、Spring Cloud、基于消息队列
微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...
- 几种常见的微服务架构方案——ZeroC IceGrid、Spring Cloud、基于消息队列、Docker Swarm
微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...
- java-spring基于redis单机版(redisTemplate)实现的分布式锁+redis消息队列,可用于秒杀,定时器,高并发,抢购
此教程不涉及整合spring整合redis,可另行查阅资料教程. 代码: RedisLock package com.cashloan.analytics.utils; import org.slf4 ...
- Spring Boot与Redis的集成
Redis是一个完全开源免费的.遵守BSD协议的.内存中的数据结构存储,它既可以作为数据库,也可以作为缓存和消息代理.因其性能优异等优势,目前已被很多企业所使用,但通常在企业中我们会将其作为缓存来使用 ...
随机推荐
- Kubernetes官方java客户端之五:proto基本操作
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- JavaScript正则表达式详解
在JavaScript中,正则表达式由RegExp对象表示.RegExp对象呢,又可以通过直接量和构造函数RegExp两种方式创建,分别如下: //直接量 var re = /pattern/[g | ...
- 免费、开源的基于tp5的快速开发框架
HisiPHP 系统官网:https://www.hisiphp.com/ 后台体验:http://v2.demo.hisiphp.com/admin.php/system/publics/index ...
- .netcore利用perf分析高cpu使用率
目录 一 在宿主机运行perf 二 容器内安装perf 1,重新构建镜像 2,下载火焰图生成脚本 3,安装linux-perf 三 CPU占用分析 1,perf record捕获进程 2,生成火焰图 ...
- ORA-28001: the password has expired解决方法
Oracle提示错误消息ORA-28001: the password has expired,是由于Oracle11G的新特性所致, Oracle11G创建用户时缺省密码过期限制是180天(即6个月 ...
- SpringBoot整合Shiro完成验证码校验
SpringBoot整合Shiro完成验证码校验 上一篇:SpringBoot整合Shiro使用Redis作为缓存 首先编写生成验证码的工具类 package club.qy.datao.utils; ...
- ansible 安装和使用
ansible 安装和使用 ## 安装epel 源: rpm -ivh https://dl.fedoraproject.org/pub/e ...
- Jenkins+windows+.netcore+git+iis自动化部署入门
什么是自动化部署,就不介绍了,喜欢直接进入主题. 一. 所需环境: 1.系统为windows10 . 2.asp.net core3.1 runtime必须安装,因为我的代码是asp.net core ...
- 【Spring】 Spring的核心容器
Spring的核心容器 文章目录 Spring的核心容器 BeanFactory ApplicationContext 1.通过ClassPathXmlApplicationContext创建 2.通 ...
- ctfhub技能树—web前置技能—http协议—基础认证
打开靶机环境 下载附件后发现是常用密码字典,于是考虑本题可能是考察密码爆破 打开环境 发现需要认证,于是考虑使用暴力破解 使用burpsuite抓包,查看 发现最下面一行有加密后的密文 使用base6 ...