麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > Redis > 正文

Spring boot+redis實現消息發布與訂閱的代碼

2020-10-28 21:27:56
字體:
來源:轉載
供稿:網友

一.創建spring boot項目

<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 { /**  * 實例化 RedisTemplate 對象  *  * @return  */ @Bean("RedisTemplateS") public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {  RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();  initDomainRedisTemplate(redisTemplate, redisConnectionFactory);  return redisTemplate; } /**  * 設置數據存入 redis 的序列化方式,并開啟事務  *   * @param redisTemplate  * @param factory  */ private void initDomainRedisTemplate(@Qualifier("RedisTemplateS") RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {  // 如果不配置Serializer,那么存儲的時候缺省使用String,如果用User類型存儲,那么會提示錯誤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());  // 開啟事務  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消息發布方法

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 ); }}

五.配置消息監聽

@Configurationpublic class RedisMessageListener { /**  * 創建連接工廠  * @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; } /**  * 綁定消息監聽者和接收監聽的方法  * @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); } /**  * 計數器,用來控制線程  * @return  */ @Bean public CountDownLatch latch(){  return new CountDownLatch(1);//指定了計數的次數 1 }}

六.消息訂閱方法

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

七.定時消息發布測試

@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"; }}

八.測試結果

九.發布對象User實體

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;  .....................}

到此這篇關于Spring boot+redis實現消息發布與訂閱的文章就介紹到這了,更多相關Spring boot redis消息發布與訂閱內容請搜索武林網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产在线精品一区二区三区 | 看免费黄色大片 | 国产午夜亚洲精品理论片大丰影院 | 久色免费 | 亚洲成人福利在线 | 久久久噜噜噜久久熟有声小说 | 免费视频xxxx | 久久久久久久久国产 | 国产一级做a爱片在线看免 2019天天干夜夜操 | 国产一区二区三区四区五区在线 | 在线成人免费视频 | 日韩视频一二三 | 亚洲国产中文字幕 | 欧美激情在线播放 | 91精品国产91| 亚洲免费资源 | 国产精品亚洲欧美一级在线 | 成人午夜在线观看视频 | 一级毛片免费一级 | 中文字幕在线观看亚洲 | 久久99久久99精品 | 国产成人高清在线观看 | 午夜久久久精品一区二区三区 | 草久在线观看视频 | 羞羞的视频在线 | 欧美激情第一区 | 欧美一级做性受免费大片免费 | 欧美一级性 | 91久久另类重口变态 | 国产精品久久久久久影视 | 亚洲第一页综合 | 黄色片网站在线看 | 久久国产在线观看 | 国产免费视频一区二区裸体 | 免费毛片小视频 | 懂色粉嫩av久婷啪 | 国产亲子伦在线观看 | 亚洲影院在线 | 久久91久久久久麻豆精品 | 一级黄色免费 | 成人富二代短视频 |