1、spring boot+maven環境:java
1.pom.xml:redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>spring
2.application.properties:api
# database name
spring.redis.database=9
# server host1
spring.redis.host=#####
# server password
spring.redis.password=#####
#connection port
spring.redis.port=#####
# pool settings ...
spring.redis.pool.max-idle=100
spring.redis.pool.min-idle=0
spring.redis.pool.max-active=300
spring.redis.pool.max-wait=1000app
3.消息發佈:maven
@SpringBootApplication
public class Application extends SpringBootServletInitializer{
@Bean
StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
return new StringRedisTemplate(connectionFactory);
}
/**
* 啓動入口
* May 9, 2017
*/
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);
// 組裝數據
JSONObject data = new JSONObject();
data.put("content", "本地測試");
// 推送消息(sync_message爲發送的消息通道)
template.convertAndSend("sync_message", data.toString());
System.out.println(" 消息 發送完畢 ");
}
}spring-boot
4.監聽器(訂閱者)配置:測試
@Configuration
public class RedisConfig {
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {spa
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
//訂閱了一個叫 sync_message 的通道
container.addMessageListener(listenerAdapter, new PatternTopic("sdk_sync_message"));
//這個container 能夠添加多個 messageListener
return container;
}.net
@Bean
MessageListenerAdapter listenerAdapter(MessageReceiver receiver) {
//這個地方 是給messageListenerAdapter 傳入一個消息接受的處理器,利用反射的方法調用「receiveMessage」
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
5.處理訂閱的信息:
@Component
public class MessageReceiver {
/**接收消息的方法*/
public void receiveMessage(String message){
System.out.println(" 接收消息 ==================" + message);
}
}
2、沒有使用spring boot的maven環境:
1.pom.xml:
<!-- redis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.8.RELEASE</version>
</dependency>
2.redis.properties:
redis.host=####
redis.port=####
redis.pass=####
redis.timeout=5000
redis.maxActive=300
redis.maxIdle=100
redis.maxWait=1000
redis.testOnBorrow=true
redis.default.db=9
3.applicationContext.xml(訂閱者配置):
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:redis.properties</value>
</list>
</property>
</bean>
<!-- jedis pool配置 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="${redis.maxActive}" />
<property name="maxIdle" value="${redis.maxIdle}" />
<property name="maxWaitMillis" value="${redis.maxWait}" />
<property name="testOnBorrow" value="${redis.testOnBorrow}" />
</bean>
<!-- spring data redis -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="usePool" value="true"></property>
<property name="hostName" value="${redis.host}" />
<property name="port" value="${redis.port}" />
<property name="password" value="${redis.pass}" />
<property name="timeout" value="${redis.timeout}" />
<property name="database" value="${redis.default.db}" />
<constructor-arg index="0" ref="jedisPoolConfig" />
</bean>
<bean id="stringRedisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
</bean>
<!-- 定義redis監聽類 -->
<bean id="sdkListener" class="com.jf.service.api.sdkMessage.SdkRedisMessageHandler" />
<!-- 定義redis監聽器 -->
<redis:listener-container connection-factory="jedisConnectionFactory">
<!-- the method attribute can be skipped as the default method name is "handleMessage" -->
<!-- topic表明監聽的通道,是一個正規匹配 -->
<redis:listener ref="sdkListener" method="sdkMessage" topic="sync_message" />
</redis:listener-container>
4.SdkRedisMessageHandler.java(處理訂閱的信息)
@Component
public class SdkRedisMessageHandler {
public void sdkMessage(String message) {
System.out.println(" 公會助手接收sdk的redis消息 ==================" + message);
}
}