Spring Spring-data-redis 實現的訊息佇列
配置環境
版本資訊:
Spring 4.2.8.RELEASE(其中囊括tx、webmvc、context、aop之類的)
Spring-data-jpa 1.10.5.RELEASE
Spring-data-redis 1.8.0.RELEASE
Spring-data-commons 1.12.5.RELEASE
MySQL 5.7
JDK 1.8
Maven依賴:
<!-- spring begin -->
<dependency>
<groupId>org.springframework</groupId >
<artifactId>spring-webmvc</artifactId>
<version>4.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version >4.2.8.RELEASE</version>
</dependency><dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.2.8.RELEASE</version>
</dependency>
<dependency >
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.9</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.10.5.RELEASE</version>
</dependency>
<!-- spring end -->
<!-- redis start-->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.0.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!--redis end-->
ApplicationContext.xml 配置
這裡就只新增 Redis 相關的資訊了。
<!-- 事務管理器 -->
<bean id="MytransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="MyentityManagerFactory" />
<property name="dataSource" ref="MydataSource"/>
</bean>
<!-- 註解式事務 -->
<tx:annotation-driven transaction-manager="MytransactionManager" />
<!--MessageQueue Start-->
<bean id="MQConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:hostName="127.0.0.1" p:port="6379" p:password="password" p:usePool="true">
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
p:connectionFactory-ref="MQConnectionFactory"/>
<!--JDK序列化工具-->
<bean id="Serialization" class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
<!--文字序列化工具-->
<bean id="Stringserialization" class="org.springframework.data.redis.serializer.StringRedisSerializer" />
<!--訂閱者-->
<bean id="Listener" class="com.MuNineyi.messagequeue.Listener"/>
<!--訂閱者介面卡-->
<bean id="MessageListenerAdapter" class="org.springframework.data.redis.listener.adapter.MessageListenerAdapter">
<property name="serializer" ref="Serialization" />
<property name="stringSerializer" ref="Stringserialization"/>
<property name="delegate" ref="Listener" /> <!--訂閱者/目的地-->
<property name="defaultListenerMethod" value="receiveMessage"/> <!--預設接收方法-->
</bean>
<!--channelPattern 通道設定器,這裡和老版本是不同的-->
<bean id="Topic" class="org.springframework.data.redis.listener.PatternTopic" beans:pattern="identity"/>
<!--裝箱,這裡和老版本是不同的-->
<bean id="RedisMessageListenerContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer">
<property name="connectionFactory" ref="MQConnectionFactory"/>
<property name="topicSerializer" ref="Stringserialization"/> <!--通道序列化-->
<property name="messageListeners">
<map key-type="org.springframework.data.redis.connection.MessageListener" value-type="org.springframework.data.redis.listener.PatternTopic">
<entry key-ref="MessageListenerAdapter" value-ref="Topic"/>
</map>
</property>
</bean>
<!--MessageQueue End-->
程式碼實現
訊息傳遞類(訊息實體)
public class Message{
private String name;
private String age;
private String liveCity;
//相關的 get、set 方法
}
Sender 傳送者
這裡可以寫成介面的形式,方便呼叫
@Service("Service")
public class Sender{
@Qualifier(value = "redisTemplate")
private RedisTemplate redisTemplate;
public void sendMessage(String channel, Serializable message) {
redisTemplate.convertAndSend(channel, message);
}
public RedisTemplate getRedisTemplate() {
return redisTemplate;
}
public void setRedisTemplate(RedisTemplate redisTemplate) {
this.redisTemplate = redisTemplate;
}
public void getInformationFromOtherAPI(String name, String age, String liveCity) throws InterruptedException {
Message message = new Message();
message.setName(name);
message.setAge(age);
message.setLiveCity(liveCity);
sendMessage("identity ", message);
}
}
Listener 訂閱者
@Service("Listener")
public class Listener{
@Autowired
private MiddleService middleService;
/**
* 訂閱者
* @param message
*/
public void receiveMessage(Serializable message) {
if (message instanceof Message){
Message message = (Message) message;
System.out.println(message.getName()+message.getAge()+message.getLiveCity());
}
}
}
簡單的程式碼實現已經完成了
呼叫 getInformationFromOtherAPI(), 就可以實現將資訊填入訊息佇列中。
下一篇會說一下由於JPA提交事務慢,導致訊息佇列找不到剛提交到資料庫的資訊的問題。
相關推薦
第八篇:Spring Boot使用Redis實現訊息佇列
目前常用的訊息佇列大概有三種類型,RabbitMQ等AMQP系列, Kafka, Redis等key-value系列,它們的使用場景分別是: 1.RabbitMQ:相對重量級高併發的情況,比如資料的非同步處理,任務的序列執行等. 2.Kafka:基於Pull的模式來處理,具體
Spring+Redis實現訊息佇列
一、概述 針對Redis,我們知道有String、List、Hash、Set、sorted Set等資料結構,而List資料結構就是一個簡單的字串列表,我們可以向列表的首部或者尾部新增或者移除元素。並且當列表中沒有元素的時候會發生阻塞或者等待超時。因此我們就可以使用Redi
Spring Session Data Redis實現session共享
web.xml odi 數據庫 tails spool ima 配置步驟 配置文件 work 1.前言 在開發中遇到一個關於用戶體驗的問題,每次當運維進行更新重啟服務器時,都會導致會員平臺中已登錄的用戶掉線。這是因為每個用戶的會話信息及狀態都是由session來保存的,
spring-session-data-redis 實現session共享
1.新增依賴 <dependency> <groupId>redis.clients</groupId> <
Qt應用Redis實現訊息佇列
類似BS模式,客戶端傳送任務請求給服務端,服務端將處理結果返回給客戶端。 redis負責訊息的儲存和轉發。 模擬病人掛號看病,Patient程序進行掛號,Doctor程序進行看病 ,程式程式碼如下: /////////////
springboot整合redis實現訊息佇列
在java中直接使用redis的時候,直接使用簡單的兩個指令lpush和rpop或者rpush和lpop就可以實現訊息佇列的操作。當與spring結合時,可以使用RedisTemplate和StringRedisTemplate;這兩個Template是spring封裝了對Redis的一些常用的
第 21 講 在Springboot使用Redis實現訊息佇列
第二十一講 在Springboot使用Redis實現訊息佇列 1.引入依賴:pom.xml <dependency> <groupId>org.springframew
SpringBoot中使用redis實現訊息佇列
在pom中加入redis依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r
Redis實現訊息佇列
個人理解在專案中使用訊息佇列一般是有如下幾個原因: 把瞬間伺服器的請求處理換成非同步處理,緩解伺服器的壓力 實現資料順序排列獲取 redis實現訊息佇列步驟如下:1).redis函式rpush,lpop2).建議定時任務入佇列3)建立定時任務出佇列 檔案:dem
springboot使用redis實現訊息佇列
一、概念訊息佇列分為兩種模式,一種是釋出訂閱模式,一種是生產者消費者模式。生產者消費者模式:生產者生產訊息放到佇列裡,多個消費者同時監聽佇列,誰先搶到訊息誰就會從佇列中取走訊息;即對於每個訊息只能被最多一個消費者擁有。釋出者訂閱者模式:釋出者生產訊息放到佇列裡,多個監聽佇列的
PHP中利用redis實現訊息佇列處理高併發請求
將請求存入redis 為了模擬多個使用者的請求,使用一個for迴圈替代 //redis資料入隊操作 $redis = new Redis(); $redis->connect('127.0.0.1',6379); for($i=0;$i<50;$i++){
PHP中利用redis實現訊息佇列處理高併發請求--簡潔程式碼實現效果
將請求存入redis 為了模擬多個使用者的請求,使用一個for迴圈替代 //redis資料入隊操作 $redis = new Redis(); $redis->connect('127.0.
利用Redis 實現訊息佇列
1.用redis中的List可以實現佇列,這樣可以用來做訊息處理和任務排程的佇列 2.程式碼模擬 程式碼結構 生產者模擬程式 /** * */ package scheduleTest; import java.util.Ra
Spring Spring-data-redis 實現的訊息佇列
配置環境 版本資訊: Spring 4.2.8.RELEASE(其中囊括tx、webmvc、context、aop之類的) Spring-data-jpa 1.10.5.RELEASE Spring-data-redis 1.8.0.RELEASE
【Redis】redis非同步訊息佇列+Spring自定義註解+AOP方式實現系統日誌持久化
說明: SSM專案中的每一個請求都需要進行日誌記錄操作。一般操作做的思路是:使用springAOP思想,對指定的方法進行攔截。拼裝日誌資訊實體,然後持久化到資料庫中。可是仔細想一下會發現:每次的客戶端的每一次請求,伺服器都會處理兩件事情。一個是正常的業務操作;另一個就是我們額外要做的日誌資料記錄。這樣的
springboot2整合spring-session-data-redis,實現session共享
1.新增Maven依賴 <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId>
spring-data-redis實現redis釋出訂閱
maven 依賴包 <properties> <spring.version>5.1.0.RELEASE</spring.version> </properties> <dependencies
spring整合rabbitmq實現訊息佇列
RabbitTemplate概念瞭解 RabbitMQ是由Erlang(愛立信公司)語言開發,實現Advanced Message Queuing Protocol (AMQP高階訊息佇列協議)的訊息中介軟體。訊息中介軟體主要用於元件之間的解耦,訊息的傳送者無需知道
spring整合kfka實現訊息佇列
1.搭建kafka執行環境 ,下載地址:http://kafka.apache.org/downloads 下載完修改安裝檔案config裡面的server.properties檔案,將listeners=PLAINTEXT://IP:9092改成伺服器的IP,修改
shiro+cas+spring-data-redis實現多系統單點登入和分散式專案的session同步
CSDN開通很久了,但是一直沒寫東西,2018年了,這是我CSDN的第一篇文章,歡迎各位評論探討和指點。 一、背景: 現在公司的業務系統要做多臺分散式叢集,由於是web專案,要做session同步,想到的方案是用目前火熱的redis資料庫儲存session,還有業