java spring redis订阅_Springboot 使用Redis发布/订阅模式

1.新增依赖

org.springframework.boot

spring-boot-starter-data-redis

com.alibaba

fastjson

1.2.49

org.springframework.boot

spring-boot-starter-web

org.projectlombok

lombok

1.18.2

org.springframework.boot

spring-boot-starter-test

test

2.配置redis

配置连接

spring:

redis:

host: localhost

port: 6379

password: root

发布者配置

@Configuration

public class PublisherConfig {

@Bean

public RedisTemplate redisMessageTemplate(RedisConnectionFactory connectionFactory) {

RedisTemplate template = new RedisTemplate<>();

template.setConnectionFactory(connectionFactory);

template.setDefaultSerializer(new FastJsonRedisSerializer<>(Object.class));

return template;

}

}

订阅者配置

@Configuration

public class ReceiverConfig {

@Bean

public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,MessageListenerAdapter userListenerAdapter,MessageListenerAdapter goodsListenerAdapter) {

RedisMessageListenerContainer container = new RedisMessageListenerContainer();

container.setConnectionFactory(connectionFactory);

container.addMessageListener(userListenerAdapter, new PatternTopic("user"));

container.addMessageListener(goodsListenerAdapter, new PatternTopic("goods"));

return container;

}

@Bean

public MessageListenerAdapter userListenerAdapter(UserReceiver receiver) {

return new MessageListenerAdapter(receiver, "receiveMessage");

}

@Bean

public MessageListenerAdapter goodsListenerAdapter(GoodsReceiver receiver) {

return new MessageListenerAdapter(receiver, "receiveMessage");

}

@Bean

public UserReceiver userReceiver() {

return new UserReceiver();

}

@Bean

public GoodsReceiver goodsReceiver() {

return new GoodsReceiver();

}

}

3.消息模型

@Data

public class RedisMessage implements Serializable {

public String msgId;

public long createStamp;

}

@EqualsAndHashCode(callSuper = true)

@Data

public class GoodsMessage extends RedisMessage {

private String goodsType;

private String number;

}

@EqualsAndHashCode(callSuper = true)

@Data

public class UserMessage extends RedisMessage {

private String userId;

private String username;

private String password;

}

4.消息发布者

@Service

public class Publisher {

private final RedisTemplate redisMessageTemplate;

@Autowired

public Publisher(RedisTemplate redisMessageTemplate) {

this.redisMessageTemplate = redisMessageTemplate;

}

public void pushMessage(String topic, RedisMessage message) {

redisMessageTemplate.convertAndSend(topic,message);

}

}

5.消息订阅者

public abstract class AbstractReceiver {

public abstract void receiveMessage(Object message);

}

@Slf4j

public class GoodsReceiver extends AbstractReceiver {

@Override

public void receiveMessage(Object message) {

log.info("接收到商品消息:{}", JSON.toJSONString(message));

}

}

@Slf4j

public class UserReceiver extends AbstractReceiver {

@Override

public void receiveMessage(Object message) {

log.info("接收到用户消息:{}", JSON.toJSONString(message));

}

}

6.测试

@Test

public void pushMessage() {

UserMessage userMessage = new UserMessage();

userMessage.setMsgId(UUID.randomUUID().toString().replace("-",""));

userMessage.setUserId("1");

userMessage.setUsername("admin");

userMessage.setUsername("root");

userMessage.setCreateStamp(System.currentTimeMillis());

publisher.pushMessage("user",userMessage);

GoodsMessage goodsMessage = new GoodsMessage();

goodsMessage.setMsgId(UUID.randomUUID().toString().replace("-",""));

goodsMessage.setGoodsType("苹果");

goodsMessage.setNumber("十箱");

goodsMessage.setCreateStamp(System.currentTimeMillis());

publisher.pushMessage("goods",goodsMessage);

}

测试结果如下:

2018-09-28 12:02:16.281 INFO 25244 --- [ main] org.qiqiang.redismq.core.PublisherTest : Started PublisherTest in 2.889 seconds (JVM running for 3.723)

2018-09-28 12:02:16.544 INFO 25244 --- [ container-2] org.qiqiang.redismq.core.UserReceiver : 接收到用户消息:"{\"createStamp\":1538107336525,\"msgId\":\"62c60489199545209f036d5eeffc353e\",\"userId\":\"1\",\"username\":\"root\"}"

2018-09-28 12:02:16.547 INFO 25244 --- [ container-3] org.qiqiang.redismq.core.GoodsReceiver : 接收到商品消息:"{\"createStamp\":1538107336543,\"goodsType\":\"苹果\",\"msgId\":\"b0ee90c6635444c490afc691a3c5cf74\",\"number\":\"十箱\"}"

2018-09-28 12:02:16.551 INFO 25244 --- [ Thread-2] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@1a4927d6: startup date [Fri Sep 28 12:02:13 CST 2018]; root of context hierarchy

2018-09-28 12:02:16.552 INFO 25244 --- [ Thread-2] o.s.c.support.DefaultLifecycleProcessor : Stopping beans in phase 2147483647

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值