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

來源:腳本之家  責任編輯:小易  

在application.properties或者application.yml中配置即可,類似例如在properties文件中配置logging.pattern.console=gray(%date{yyyy-MM-dd HH:mm:ss:SSS})|%highlight(%-5level)|%red(%thread)|%boldYellow(%logger)|%msg%nwww.anxorj.tw防采集請勿采集本網。

一.創建spring boot項目

Spring Boot 將“以約定代替配置(Convention Over Configuration)”的原則發揮到了極致,進一步提升易用性。Spring Cloud 利用 Netflix 的開源組件解決了與云原生應用開發相關的問題,如服務注冊、服務

<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>

JHipster:基于Spring Boot與AngularJS應用程序的Yeoman源代碼生成器。官網 JRebel:無需重新部署,可以即時重新加載代碼與配置的商業軟件。官網 Lombok:減少冗余的代碼生成器。官網 Spring Loaded:類

二.編輯yml配置文件

26個字母在單詞中的發音發音表如下。1、A、B、C、D、E這5個字母的發音如下。2、F、G、H、I、J這5個字母的發音如下。3、K、L、M、N、O這5個字母的發音如下。4、P、Q、R、S、T這5個字母的發音如下

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

Cauliflower 白花菜 Spring onions 蔥 Garlic 大蒜 Ginger 姜 Chinese leaves 大白菜 Leeks 大蔥 Mustard&cress 芥菜苗 Green Pepper 青椒 Red pepper 紅椒 Yellow pepper 黃椒 Mushroom 洋菇 Broccoli

三.配置Redis

7.小城之春 Spring in a Small Town(1948)(中國) 一部典型的心理抒情片 世界電影史上不可多得的藝術珍品 開創了中國電影史上詩化電影的先河 8.羅生門 Rash?mon(1950)(日本) 挖掘人性丑惡的巔峰之

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

七.定時消息發布測試

@[email protected] 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消息發布與訂閱內容請搜索真格學網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持真格學網!

轉自:IntelliJ IDEA必裝插件以及SpringBoot使IntelliJ IDEA必裝插件有不知道怎么安裝的嗎?File->settings打開設置面板,找到plugins,輸入想要安裝的插件回車即可。plugins面板1.背景圖片目前,IDEA支持設置背景圖片。這對于廣大程序員來說無疑是個好功能。整日對著枯燥的代碼實在是會讓人疲乏。要是可以設置一張美女圖片的話。設置方法:Ctrl+Shift+A(或者help->find action)調用彈窗后輸入Set Background Image。在里面設定要設置為Image的圖片,透明度調到15左右,保存即可。效果如圖:2.Maven Helper日常開發中,可能經常會遇到jar包沖突等問題,就需要通過查看maven依賴樹來查看依賴情況。這種方式不是很高效,這里推薦一個插件,安裝之后,直接打開pom文件,即可查看依賴數,還能自動分析是否存在jar包沖突。一旦安裝了Maven Helper插件,只要打開pom文件,就可以打開該pom文件的Dependency Analyzer視圖(在文件打開之后,文件下面會多出這樣一個tab)。進入Dependency Analyzer視圖之后有三個查看選項分別是:Conflicts(沖突)All Dependencies as List(列表形式查看所有依賴)All Dependencies as Tree(樹結構查看所有依賴),并且這個頁面還支持搜索。3.FindBugs-IDEAFindBugs很多人都并不陌生,Eclipse中有插件可以幫助查找代碼中隱藏的bug,IDEA中也有這款插件。使用方法很簡單,就是可以對多種級別的內容進行finbugs。分析完之后會有一個視圖進行提示,詳細的說明是哪種問題。4.阿里巴巴代碼規約檢測檢測JAVA代碼中存在不規范得位置然后給予提示,阿里巴巴規約插件包含三個子菜單:編碼規約掃描、關閉試試檢測功能。安裝好此插件即可自動在不規范位置給與提示。5.GsonFormatJava開發中,經常有把json格式的內容轉成Object的需求,比如項目開始時,合作方給你提供了一個json格式request/response,這時候你就需要將其定義成一個Java類,GsonFormat這款插件可以實現該功能。6.Lombok plugin在Java中,我們經常會定義很多JavaBean,這些Bean需要有getter、setter、toString、equals和hashCode等方法。通常情況下,我們可以使用IDEA的快捷鍵生成這些代碼,但是自動生成的代碼后,如果bean中的屬性一旦有修改,需要重新生成,給代碼維護增加了一定的負擔。有一款很好的插件,可以幫助開發者節省這部分工作。那就是Lombok。只要在IDEA中安裝了該插件,只需要在JavaBean中添加一行注解代碼,插件就會自動幫我們生成getter、setter、toString、equals和hashCode等方法。當然,這些方法不止在IDE中的代碼調用中需要用到,在真正線上部署的時候也需要有,所以,還需要使用maven引入一個lombok的包。Data class Wechat {private String id;private String desc;}我們在Wechat類上面添加了@Data注解,插件就自動幫我們添加了getter/setter和toString方法。7.String Manipulation字符串日常開發中經常用到的,但是不同的字符串類型在不同的地方可能有一些不同的規則,比如類名要用駝峰形式、常量需要全部大寫等,有時候還需要進行編碼解碼等。這里推薦一款強大的字符串轉換工具—String Manipulation。它強大到什么程度,看下他的功能列表你就知道了:安裝好插件后,選中需要處理的內容后,按快捷鍵Alt+m,即可彈出工具功能列表。很好很強大的一款字符串處理工具。8.Mybatis plugin目前ORM框架中,Mybatis非常受歡迎。但是,同時給很多開發帶來困擾的就是Mybatis需要很多xml的配置文件,有的時候很難去進行修改。這里推薦一款神器,可以讓你像編輯java代碼一樣編輯mybatis的文件。Intellij Idea Mybatis插件主要功能:提供Mapper接口與配置文件中對應SQL的導航編輯XML文件時自動補全根據Mapper接口,使用快捷鍵生成xml文件及SQL標簽ResultMap中的property支持自動補全,支持級聯(屬性A.屬性B.屬性C)快捷鍵生成@Param注解XML中編輯SQL時,括號自動補全XML中編輯SQL時,支持參數自動補全(基于@Param注解識別參數)自動檢查Mapper XML文件中ID沖突自動檢查Mapper XML文件中錯誤的屬性值支持Find Usage支持重構從命名支持別名自動生成ResultMap屬性(圖源:https://www.oschina.net/p/intellij-mybatis-plugin)但是這款插件是收費的,但是不影響他確實是一個很實用,可以很大程度上提升開發效率的插件。讀者可以考慮使用Free Mybatis plugin(這款插件我沒用過,具體是否好用有待考證)。9.Key promoter X對于很多剛剛開始使用IDEA的開發者來說,最苦惱的就是不知道快捷鍵操作是什么。使用IDEA,如果所有操作都使用鼠標,那么說明你還不是一個合格的程序員。這里推薦一款可以進行快捷鍵提示的插件Key promoter X。Key Promoter X 是一個提示插件,當你在IDEA里面使用鼠標的時候,如果這個鼠標操作是能夠用快捷鍵替代的,那么Key Promoter X會彈出一個提示框,告知你這個鼠標操作可以用什么快捷鍵替代。當我使用鼠標查看一個方法都被哪些類使用的時候,就會提示:記住這個快捷鍵以后,就可以使用快捷鍵代替鼠標啦。10.activate-power-mode最后,介紹一款程序員很好的在妹子面前裝X的插件—activate-power-mode。安裝了這款插件之后,你寫代碼的時候,就會附加一些狂拽炫酷屌炸天的效果11.ignoregit提交時過濾掉不需要提交的文件,很方便,有些本地文件是不需要提交到Git上的。12.CamelCase將不是駝峰格式的名稱,快速轉成駝峰格式,安裝好后,選中要修改的名稱,按快捷鍵shift+alt+u。13.CodeGlance在編輯區的右側顯示的代碼地圖。14.Material Theme UI這是一款主題插件,可以讓你的ide的圖標變漂亮,配色搭配的很到位,還可以切換不同的顏色,甚至可以自定義顏色。默認的配色就很漂亮了,如果需要修改配色,可以在工具欄中Tools->Material Theme然后修改配色等。15.Background image Plus這是一款可以設置idea背景圖片的插件,不但可以設置固體的圖片,還可以設置一段時間后隨機變化背景圖片,以及設置圖片的透明度等等。16.#Rainbow Brackets彩虹顏色的括號 看著很舒服 敲代碼效率變高SpringBoot|番外:使用小技巧合集設置網站圖標原來我們在使用tomcat開發時,設置網站圖片時,即icon圖標時,一般都是直接替換root包下的favicon.ico替換成自己的,或者在網頁的頭部設置link的ref為icon然后設置其href值。而在SpringBoot中,替換圖片也是很簡單的,只需要將自定義圖片放置在靜態資源目錄下即可,即默認有static、public、resources、/META-INF/resources或者自定義的靜態目錄下即可。目錄結構:允許跨域訪問CORS是一個W3C標準,全稱是”跨域資源共享”(Cross-origin resource sharing)。它允許瀏覽器向跨源(協議+域名+端口)服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。簡單來說,跨域問題是可以通過nginx來解決的,或者通過jsonp(只支持get請求)來解決。而SpringBoot中也提供了配置方法。0.利用@CrossOrigin注解,可放至在類上或者方法上。類上代表整個控制層所有的映射方法都支持跨域請求。CrossOrigin(origins="http://blog.lqdev.cn",maxAge=3600)@RestController public class demoController{GetMapper("/")public String index(){return"hello,CORS;} }1.配置全局CORS配置。官網也有給出實例,具體如下:Configuration public class MyConfiguration {Beanpublic WebMvcConfigurer corsConfigurer(){return new WebMvcConfigurerAdapter(){Overridepublic void addCorsMappings(CorsRegistry registry){ registry.addMapping("/api/*").allowedOrigins("https://blog.lqdev.cn");}};} }獨立Tomcat運行講解了這么久,一般上我們都是通過jar包的方式進行啟動的應用的。所以部署在獨立的tomcat時,需要如何解決呢?其實也簡單,只需要將項目打包方式修改為war包,然后修改下啟動類配置即可。0.修改pom打包方式為war,同時排除了內置的tomcat。war!排除內置的tomcat->org.springframework.bootspring-boot-starter-tomcatcompile若直接有使用servlet對象時(這是廢話,⊙﹏⊙∣),需要將servlet引入,本例是沒有的~->javax.servletjavax.servlet-apiprovided1.改造下啟動類,使其繼承SpringBootServletInitializer,同時覆蓋configure方法。[email protected] public class ChapterApplication extends SpringBootServletInitializer{public static void main(String[]args){SpringApplication.run(ChapterApplication.class,args);new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args);之后這里設置業務邏輯 比如掛起一個線程 或者設置一個定時任務。保證不退出不然它就是一個啟動類,啟動后就停止了。log.info("jar,chapter啟動!}Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application){log.info("外部tomcat,chapter啟動!return application.sources(ChapterApplication.class);} }2.maven打包成war(mvn clean install),然后放入tomcat中,啟動運行即可。其實這樣設置的話,在開發時直接運行啟動類也還是可以直接運行的,方便.啟動不設置端口對一些定時任務服務項目,其本身只是提供一個定時調度功能,不需要其他服務調用,只是去調度其他服務。像這樣的服務,正常也就不需要設置端口了。這時候SpringBoot也是支持的。只需要改下啟動方式:new SpringApplicationBuilder().sources(ChapterApplication.class).web(false).run(args);之后這里設置業務邏輯 比如掛起一個線程 或者設置一個定時任務。保證不退出不然它就是一個啟動類,啟動后就停止了;蛘咝薷呐渲梦募膶傩裕簊pring.main.web-environment=fals最后效果,是不是沒有看見端口了:啟動完成前進行業務邏輯利用CommandLineRunner或者..內容來自www.anxorj.tw請勿采集。


  • 本文相關:
  • springboot集成redisson實現分布式鎖的方法示例
  • spring boot整合redis的完整步驟
  • spring boot單元測試中使用mockito框架mock掉整個redistemplate的示例
  • 在springboot中添加redis及配置方法
  • python redis操作實例分析【連接、管道、發布和訂閱等】
  • redis 訂閱發布_jedis實現方法
  • nodejs redis 發布訂閱機制封裝實現方法及實例代碼
  • redis數據類型_動力節點java學院整理
  • 如何操作redis和zookeeper實現分布式鎖
  • redis服務器允許遠程主機訪問的方法
  • 使用redis實現延時任務的解決方案
  • redis中hash表內容刪除的方法代碼
  • 基于redis分布式鎖的實現代碼
  • redis分布式鎖的問題與解決方法
  • redis配置文件代碼講解
  • redis的持久化方案詳解
  • redis列表類型_動力節點java學院整理
  • idea 有沒有spring boot插件
  • spring boot logback日志 怎么彩色輸出
  • 用英語寫一張明信片(6句給老師)
  • 電腦開機的時候出現Boot Menu 15[ 標簽:電腦,boot,menu ] 開機的時候出現一個這樣的英文框框 Boot Menu
  • 動蕩的 Java 今年將有哪些新變化
  • GitHub上面有哪些經典的java框架源碼
  • 26個字母在單詞中的發音 發音表
  • 200個正確的英語名詞
  • 世界50部經典電影都是哪些?
  • 島津GC-14C氣相色譜 分流比怎么設定
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁redisspringboot集成redisson實現分布式鎖的方法示例spring boot整合redis的完整步驟spring boot單元測試中使用mockito框架mock掉整個redistemplate的示例在springboot中添加redis及配置方法python redis操作實例分析【連接、管道、發布和訂閱等】redis 訂閱發布_jedis實現方法nodejs redis 發布訂閱機制封裝實現方法及實例代碼redis數據類型_動力節點java學院整理如何操作redis和zookeeper實現分布式鎖redis服務器允許遠程主機訪問的方法使用redis實現延時任務的解決方案redis中hash表內容刪除的方法代碼基于redis分布式鎖的實現代碼redis分布式鎖的問題與解決方法redis配置文件代碼講解redis的持久化方案詳解redis列表類型_動力節點java學院整理超強、超詳細redis數據庫入門教程redis常用命令、常見錯誤、配置技redis操作命令總結redis中5種數據結構的使用場景介64位windows下安裝redis教程redis中使用redis-dump導出、導入redis中統計各種數據大小的方法redis常用命令小結讓redis在你的系統中發揮更大作用centos 6.6下redis安裝配置記錄redis sentinel實現哨兵模式搭建小結redis中scan命令的深入講解redis發布訂閱和實現.net客戶端詳解redis哈希和集合_動力節點java學院整理redis cluster集群數據分片機制原理redis中熱key問題該如何解決redis服務器的啟動過程分析redis單線程快的原因和原理詳細分析redis集群故障redis瞬時高并發秒殺方案總結
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.anxorj.tw All Rights Reserved
    陕西快乐10分下载