新增:
1、redis 发布订阅 2、发布订阅模型修改
This commit is contained in:
71
src/com/zdemo/redis/RedisConsumer.java
Normal file
71
src/com/zdemo/redis/RedisConsumer.java
Normal file
@@ -0,0 +1,71 @@
|
||||
package com.zdemo.redis;
|
||||
|
||||
import com.zdemo.Event;
|
||||
import com.zdemo.IConsumer;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.service.Service;
|
||||
import org.redkale.util.AnyValue;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
|
||||
public abstract class RedisConsumer<T extends Event> implements IConsumer<T>, Service {
|
||||
|
||||
@Resource(name = "property.redis.host")
|
||||
private String host = "127.0.0.1";
|
||||
@Resource(name = "property.redis.password")
|
||||
private String password = "";
|
||||
@Resource(name = "property.redis.port")
|
||||
private int port = 6379;
|
||||
|
||||
public String getGroupid() {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init(AnyValue config) {
|
||||
try {
|
||||
Socket client = new Socket();
|
||||
client.connect(new InetSocketAddress(host, port));
|
||||
client.setKeepAlive(true);
|
||||
|
||||
OutputStreamWriter oswSub = new OutputStreamWriter(client.getOutputStream());
|
||||
oswSub.write("AUTH " + password + "\r\n");
|
||||
oswSub.flush();
|
||||
|
||||
StringBuffer buf = new StringBuffer("SUBSCRIBE");
|
||||
for (String topic : getSubscribes()) {
|
||||
buf.append(" ").append(topic);
|
||||
}
|
||||
buf.append(" _ping\r\n");
|
||||
oswSub.write(buf.toString());
|
||||
oswSub.flush();
|
||||
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
|
||||
String type = "";
|
||||
String readLine;
|
||||
while ((readLine = br.readLine()) != null) {
|
||||
if ("*3".equals(readLine)) {
|
||||
br.readLine(); // $7 len()
|
||||
type = br.readLine(); // message
|
||||
if (!"message".equals(type)) {
|
||||
continue;
|
||||
}
|
||||
br.readLine(); //$n len(key)
|
||||
String topic = br.readLine(); // topic
|
||||
|
||||
br.readLine(); //$n len(value)
|
||||
String value = br.readLine(); // value
|
||||
T t = JsonConvert.root().convertFrom(getTypeToken().getType(), value);
|
||||
accept(t);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
52
src/com/zdemo/redis/RedisProducer.java
Normal file
52
src/com/zdemo/redis/RedisProducer.java
Normal file
@@ -0,0 +1,52 @@
|
||||
package com.zdemo.redis;
|
||||
|
||||
import com.zdemo.Event;
|
||||
import com.zdemo.IProducer;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.service.Service;
|
||||
import org.redkale.util.AnyValue;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
|
||||
public class RedisProducer<T extends Event> implements IProducer<T>, Service {
|
||||
|
||||
@Resource(name = "property.redis.host")
|
||||
private String host = "127.0.0.1";
|
||||
@Resource(name = "property.redis.password")
|
||||
private String password = "";
|
||||
@Resource(name = "property.redis.port")
|
||||
private int port = 6379;
|
||||
|
||||
private OutputStreamWriter oswPub;
|
||||
|
||||
@Override
|
||||
public void init(AnyValue config) {
|
||||
try {
|
||||
Socket client = new Socket();
|
||||
client.connect(new InetSocketAddress(host, port));
|
||||
client.setKeepAlive(true);
|
||||
|
||||
oswPub = new OutputStreamWriter(client.getOutputStream());
|
||||
oswPub.write("AUTH " + password + "\r\n");
|
||||
oswPub.flush();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void send(T... t) {
|
||||
for (T x : t) {
|
||||
try {
|
||||
oswPub.write("PUBLISH " + x.getTopic() + " '" + JsonConvert.root().convertTo(x) + "' \r\n");
|
||||
oswPub.flush();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user