Я новичок в Spring Integration & Redis, поэтому приношу свои извинения, если я совершаю наивную ошибку.
Мое требование следующее:
- Требуется реализовать очередь сообщений.Для отправки денег пользователю на основе некоторых событий.
- Очередь не должна быть изменчивой и обеспечивать атомарность.Если я перезапустил сервер или он вышел из строя, он не должен потерять сообщение о событии.Сюда также входят сообщения, которые в данный момент выполняются.
- Очередь должна доставлять сообщение, предоставленное один раз и только один раз.Это будет многопоточная (рабочая) и многосерверная среда.
Мой прогресс до сих пор заключается в настройке Spring Integration и Spring Integration Redis в моем весеннем проекте.Моя конфигурация Spring Integration, как показано ниже -
<int-redis:queue-outbound-channel-adapter
id="event-outbound-channel-adapter"
channel="eventChannelJson"
serializer="serializer"
auto-startup="true" connection-factory="redisConnectionFactory"
queue="my-event-queue" />
<int:gateway id="eventChannelGateway"
service-interface="com.test.RedisChannelGateway"
error-channel="errorChannel" default-request-channel="eventChannel">
<int:default-header name="topic" value="queue"/>
</int:gateway>
<int:channel id="eventChannelJson"/>
<int:channel id="eventChannel">
<int:queue/>
</int:channel>
<bean id="serializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
<int:object-to-json-transformer input-channel="eventChannel"
output-channel="eventChannelJson"/>
<int-redis:queue-inbound-channel-adapter id="event-inbound-channel-adapter"
channel="eventChannelJson" queue="my-event-queue"
serializer="serializer" auto-startup="true"
connection-factory="redisConnectionFactory"/>
<bean id="serializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
<int:json-to-object-transformer input-channel="eventChannelJson"
output-channel="eventChannel"
type="com.test.PostPublishedEvent"/>
<int:service-activator input-channel="eventChannel" ref="RedisEventProcessingService"
method="process">
<int:poller fixed-delay="10" time-unit="SECONDS" max-messages-per-poll="500"/>
</int:service-activator>
Я читал статью на аналогичную тему, где они использовали redis RPOPLPUSH для этой цели.Но я не могу понять, как это сделать в Spring Integration.Ссылка на статью - https://redis.io/commands/RPOPLPUSH
Пожалуйста, посоветуйте мне почитать это.Я очень ценю вашу помощь.