国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Spring boot+redis實(shí)現(xiàn)消息發(fā)布與訂閱的代碼

瀏覽:137日期:2023-09-08 09:18:21

一.創(chuàng)建spring boot項(xiàng)目

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.41</version> </dependency>

二.編輯yml配置文件

server: port: 7888# 日志配置logging: config: classpath:log/logback.xml level: cn.com.dhcc: info org.springframework: info org.springframework.web: info com.alibaba.nacos.client.naming: errorspring: redis: host: localhost port: 6379 password: ********* database: 1 jedis: pool: max-idle: 8 max-active: 8 max-wait: -1 min-idle: 0 timeout: 5000

三.配置Redis

@Configurationpublic class RedisConfiguration { /** * 實(shí)例化 RedisTemplate 對(duì)象 * * @return */ @Bean('RedisTemplateS') public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); initDomainRedisTemplate(redisTemplate, redisConnectionFactory); return redisTemplate; } /** * 設(shè)置數(shù)據(jù)存入 redis 的序列化方式,并開啟事務(wù) * * @param redisTemplate * @param factory */ private void initDomainRedisTemplate(@Qualifier('RedisTemplateS') RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) { // 如果不配置Serializer,那么存儲(chǔ)的時(shí)候缺省使用String,如果用User類型存儲(chǔ),那么會(huì)提示錯(cuò)誤User can’t cast to // String! redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setHashKeySerializer(new StringRedisSerializer()); FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<Object>(Object.class); redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); redisTemplate.setValueSerializer(fastJsonRedisSerializer); //redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer()); //redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // 開啟事務(wù) redisTemplate.setEnableTransactionSupport(true); redisTemplate.setConnectionFactory(factory); } /** * 注入封裝RedisTemplate @Title: redisUtil @return RedisUtil @date * */ @Bean(name = 'redisUtils') public RedisUtils redisUtil(@Qualifier('RedisTemplateS') RedisTemplate<String, Object> redisTemplate) { RedisUtils redisUtil = new RedisUtils(); redisUtil.setRedisTemplate(redisTemplate); return redisUtil; }

四.編寫RedisUtil消息發(fā)布方法

public class RedisUtils { private static final Logger log = LoggerFactory.getLogger(RedisUtils.class); private RedisTemplate<String, Object> redisTemplate; public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) { this.redisTemplate = redisTemplate; } public void publish(String channal ,Object obj) { redisTemplate.convertAndSend(channal,obj ); }}

五.配置消息監(jiān)聽

@Configurationpublic class RedisMessageListener { /** * 創(chuàng)建連接工廠 * @param connectionFactory * @param listenerAdapter * @return */ @Bean public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter,MessageListenerAdapter listenerAdapter2){ RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); //接受消息的key container.addMessageListener(listenerAdapter,new PatternTopic('phone')); return container; } /** * 綁定消息監(jiān)聽者和接收監(jiān)聽的方法 * @param receiver * @return */ @Bean public MessageListenerAdapter listenerAdapter(ReceiverRedisMessage receiver){ return new MessageListenerAdapter(receiver,'receiveMessage'); } /** * 注冊訂閱者 * @param latch * @return */ @Bean ReceiverRedisMessage receiver(CountDownLatch latch) { return new ReceiverRedisMessage(latch); } /** * 計(jì)數(shù)器,用來控制線程 * @return */ @Bean public CountDownLatch latch(){ return new CountDownLatch(1);//指定了計(jì)數(shù)的次數(shù) 1 }}

六.消息訂閱方法

public class ReceiverRedisMessage { private static final Logger log = LoggerFactory.getLogger(ReceiverRedisMessage.class); private CountDownLatch latch; @Autowired public ReceiverRedisMessage(CountDownLatch latch) { this.latch = latch; } /** * 隊(duì)列消息接收方法 * * @param jsonMsg */ public void receiveMessage(String jsonMsg) { log.info('[開始消費(fèi)REDIS消息隊(duì)列phone數(shù)據(jù)...]'); try { log.info('監(jiān)聽者收到消息:{}', jsonMsg); JSONObject exJson = JSONObject.parseObject(jsonMsg); User user = JSON.toJavaObject(exJson, User.class); System.out.println('轉(zhuǎn)化為對(duì)象 :'+user); log.info('[消費(fèi)REDIS消息隊(duì)列phone數(shù)據(jù)成功.]'); } catch (Exception e) { log.error('[消費(fèi)REDIS消息隊(duì)列phone數(shù)據(jù)失敗,失敗信息:{}]', e.getMessage()); } latch.countDown(); }}

七.定時(shí)消息發(fā)布測試

@EnableScheduling@Componentpublic class PublisherController { private static final Logger log = LoggerFactory.getLogger(PublisherController.class); @Autowired private RedisUtils redisUtils; @Scheduled(fixedRate = 5000) public String pubMsg() { User user=new User(1, '尚***', 26,'男','陜西省xxxx市xxxxxx縣'); redisUtils.publish('phone', user); log.info('Publisher sendes Topic... '); return 'success'; }}

八.測試結(jié)果

Spring boot+redis實(shí)現(xiàn)消息發(fā)布與訂閱的代碼

九.發(fā)布對(duì)象User實(shí)體

public class User implements Serializable { /** * */ private static final long serialVersionUID = 1L; private int id; private String name; private int age; private String sex; private String address; .....................}

到此這篇關(guān)于Spring boot+redis實(shí)現(xiàn)消息發(fā)布與訂閱的文章就介紹到這了,更多相關(guān)Spring boot redis消息發(fā)布與訂閱內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 欧美真人毛片动作视频 | 美女一级免费毛片 | 神马午夜不卡 | 未成人做爰视频www 窝窝午夜精品一区二区 | 免费人成网站在线播放 | 免费一级毛片在线播放欧美 | 国产精品成人久久久 | 国产aaa级一级毛片 国产aaa毛片 | 久草视频在线免费 | 欧美日本一区二区三区 | 国产成人一区二区三区 | 国产精品黄在线观看免费 | 高清在线一区二区 | 国产精品视频视频久久 | 久久这里只有精品视频99 | 一区二区三区在线免费看 | 久久色视频在线观看 | 亚洲欧美激情在线 | 欧美在线视频 一区二区 | 一级做a爰片毛片 | 国产免费专区 | 国产精品久久一区 | 欧美日韩高清观看一区二区 | 欧美高清不卡 | 国产成人黄网址在线视频 | 一本不卡 | 失禁h啪肉尿出来高h健身房 | 青草久久网| 九九九九在线视频播放 | 九九综合九九综合 | 欧美视频一区二区专区 | 一区二区三区视频观看 | 欧洲一级视频 | 亚洲精品久久99久久一区 | 国产午夜精品久久久久小说 | 狠狠色综合久久丁香婷婷 | 国产成人在线视频免费观看 | 欧美日韩在线第一页 | 玖玖精品在线观看 | 最新精品亚洲成a人在线观看 | 精品国产综合区久久久久99 |