├── .gitignore
├── README.md
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── demo
│ │ └── redis
│ │ ├── DemoRedisApp.java
│ │ ├── config
│ │ └── RedisConfig.java
│ │ ├── pojo
│ │ ├── Result.java
│ │ ├── ShortMessage.java
│ │ ├── SimpleMessage.java
│ │ └── User.java
│ │ └── service
│ │ ├── ConsumerImpl.java
│ │ ├── ConsumerImpl2.java
│ │ ├── ConsumerImpl3.java
│ │ ├── DemoService.java
│ │ ├── DemoServiceImpl.java
│ │ ├── ProduceService.java
│ │ └── ProduceServiceImpl.java
└── resources
│ └── application.properties
└── test
└── java
└── com
└── demo
└── redis
└── AppTest.java
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled class file
2 | *.class
3 |
4 | # Log file
5 | *.log
6 |
7 | # BlueJ files
8 | *.ctxt
9 |
10 | # Mobile Tools for Java (J2ME)
11 | .mtj.tmp/
12 |
13 | # Package Files #
14 | *.jar
15 | *.war
16 | *.ear
17 | *.zip
18 | *.tar.gz
19 | *.rar
20 |
21 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
22 | hs_err_pid*
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # demo-messageQueue-springboot-redis
2 | springboot集成redis做消息队列测试demo
3 | ## 发布者和订阅者模式:
4 | 发布者发送消息到队列,每个订阅者都能收到一样的消息。
5 | 主要使用了redis提供的rightPopAndLeftPush获取队列数据,如果队列没有数据则阻塞等待,也就是监听。
6 | ## 生产者和消费者模式:
7 | 生产者将消息放入队列,多个消费者共同监听,谁先抢到资源,谁就从队列中取走消息去处理。注意,每个消息只能最多被一个消费者接收。
8 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 |
5 | demo-redis
6 | redis
7 | 0.0.1-SNAPSHOT
8 | jar
9 |
10 | redis
11 | http://maven.apache.org
12 |
13 |
14 | org.springframework.boot
15 | spring-boot-starter-parent
16 | 1.5.3.RELEASE
17 |
18 |
19 |
20 | UTF-8
21 |
22 |
23 |
24 |
25 | junit
26 | junit
27 | test
28 |
29 |
30 | com.alibaba
31 | fastjson
32 | 1.2.41
33 |
34 |
35 | org.springframework.boot
36 | spring-boot-starter
37 |
38 |
39 | org.springframework.boot
40 | spring-boot-starter-test
41 | test
42 |
43 |
44 | org.springframework.boot
45 | spring-boot-starter-data-redis
46 |
47 |
48 |
49 | com.fasterxml.jackson.core
50 | jackson-databind
51 |
52 |
53 | com.fasterxml.jackson.core
54 | jackson-core
55 |
56 |
57 | com.fasterxml.jackson.core
58 | jackson-annotations
59 |
60 |
61 |
62 |
63 |
64 |
65 | org.springframework.boot
66 | spring-boot-maven-plugin
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/src/main/java/com/demo/redis/DemoRedisApp.java:
--------------------------------------------------------------------------------
1 | package com.demo.redis;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 |
7 | @SpringBootApplication
8 | public class DemoRedisApp
9 | {
10 | public static void main(String[] args) {
11 | SpringApplication.run(DemoRedisApp.class, args);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/demo/redis/config/RedisConfig.java:
--------------------------------------------------------------------------------
1 | package com.demo.redis.config;
2 |
3 |
4 |
5 | import java.lang.reflect.Method;
6 |
7 | import org.springframework.beans.factory.annotation.Qualifier;
8 | import org.springframework.beans.factory.annotation.Value;
9 | import org.springframework.cache.CacheManager;
10 | import org.springframework.cache.annotation.CachingConfigurerSupport;
11 | import org.springframework.cache.annotation.EnableCaching;
12 | import org.springframework.cache.interceptor.KeyGenerator;
13 | import org.springframework.context.annotation.Bean;
14 | import org.springframework.context.annotation.Configuration;
15 | import org.springframework.data.redis.cache.RedisCacheManager;
16 | import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
17 | import org.springframework.data.redis.core.RedisTemplate;
18 | import org.springframework.data.redis.listener.PatternTopic;
19 | import org.springframework.data.redis.listener.RedisMessageListenerContainer;
20 | import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
21 | import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
22 | import org.springframework.data.redis.serializer.StringRedisSerializer;
23 |
24 | import com.fasterxml.jackson.annotation.PropertyAccessor;
25 | import com.demo.redis.service.ConsumerImpl;
26 | import com.demo.redis.service.ConsumerImpl2;
27 | import com.fasterxml.jackson.annotation.JsonAutoDetect;
28 | import com.fasterxml.jackson.databind.ObjectMapper;
29 |
30 | import redis.clients.jedis.JedisPoolConfig;
31 |
32 | @Configuration
33 | @EnableCaching
34 | public class RedisConfig extends CachingConfigurerSupport{
35 |
36 | @Override
37 | @Bean
38 | public KeyGenerator keyGenerator() {
39 | return new KeyGenerator() {
40 | @Override
41 | public Object generate(Object target, Method method, Object... params) {
42 | StringBuilder sb = new StringBuilder();
43 | sb.append(target.getClass().getName());
44 | sb.append(method.getName());
45 | for (Object obj : params) {
46 | sb.append(obj.toString());
47 | }
48 | return sb.toString();
49 | }
50 | };
51 | }
52 |
53 | @SuppressWarnings("rawtypes")
54 | @Bean
55 | public CacheManager cacheManager(RedisTemplate redisTemplate) {
56 | RedisCacheManager rcm = new RedisCacheManager(redisTemplate);
57 | //设置缓存过期时间
58 | rcm.setDefaultExpiration(60);//秒
59 | return rcm;
60 | }
61 |
62 | @Bean(name="jedisPoolConfig")
63 | JedisPoolConfig jedisPoolConfig(
64 | @Value("${redis.pool.maxTotal}") int maxTotal,
65 | @Value("${redis.pool.maxIdle}") int maxIdle,
66 | @Value("${redis.pool.minIdle}") int minIdle,
67 | @Value("${redis.pool.maxWaitMillis}") int maxWaitMillis,
68 | @Value("${redis.pool.minEvictableIdleTimeMillis}") long minEvictableIdleTimeMillis,
69 | @Value("${redis.pool.numTestsPerEvictionRun}") int numTestsPerEvictionRun,
70 | @Value("${redis.pool.timeBetweenEvictionRunsMillis}") long timeBetweenEvictionRunsMillis
71 | ){
72 | JedisPoolConfig jpc = new JedisPoolConfig();
73 | jpc.setMaxTotal(maxTotal);
74 | jpc.setMaxIdle(maxIdle);
75 | jpc.setMinIdle(minIdle);
76 | jpc.setMaxWaitMillis(maxWaitMillis);
77 | jpc.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
78 | jpc.setNumTestsPerEvictionRun(numTestsPerEvictionRun);
79 | jpc.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
80 | return jpc;
81 | }
82 |
83 | @Bean(name="jedisConnectionFactory")
84 | JedisConnectionFactory jedisConnectionFactory(
85 | @Qualifier("jedisPoolConfig") JedisPoolConfig poolConfig,
86 | @Value("${redis.timeout}") int timeout,
87 | @Value("${redis.host}") String host,
88 | @Value("${redis.database}") int database,
89 | @Value("${redis.port}") int port
90 | ){
91 | JedisConnectionFactory jcf = new JedisConnectionFactory(poolConfig);
92 | jcf.setHostName(host);
93 | jcf.setDatabase(database);
94 | jcf.setPort(port);
95 | jcf.setTimeout(timeout);
96 | jcf.setUsePool(true);
97 | return jcf;
98 | }
99 |
100 | @Bean(name="redisTemplate")
101 | RedisTemplate redisTemplate(
102 | @Qualifier("jedisConnectionFactory") JedisConnectionFactory connectionFactory
103 | ){
104 | RedisTemplate rt = new RedisTemplate();
105 | rt.setConnectionFactory(connectionFactory);
106 | rt.setKeySerializer(new StringRedisSerializer());
107 | rt.setHashKeySerializer(new StringRedisSerializer());
108 | Jackson2JsonRedisSerializer