pom文件
1.8
3.5.1
4.1.7.RELEASE
1.8.0.RELEASE
3.4.1
1.3.0
5.1.39
1.0.27
1.8.9
1.7.7
1.2.17
1.13.2
3.6.0
windows-x86_64
${project.basedir}/src/main/java
**/*.properties
**/*.xml
false
${project.basedir}/src/main/resources
conf/*.properties
${project.basedir}/src/main/resources
conf/${profiles.active}.properties
kr.motd.maven
os-maven-plugin
1.6.0
org.apache.maven.plugins
maven-compiler-plugin
3.1
${java.version}
${java.version}
UTF-8
org.xolstice.maven.plugins
protobuf-maven-plugin
0.5.1
${basedir}/src/main/proto
com.google.protobuf:protoc:${protobuf.version}:exe:${os.detected.classifier}
grpc-java
${basedir}/src/main/java
io.grpc:protoc-gen-grpc-java:${grpc.version}:exe:${os.detected.classifier}
false
compile
compile-custom
dev
true
dev
test
test
release
release
目录结构如下
Consumer.proto文件
syntax = "proto3";
package com.grpc.proto;
option java_package = "com.grpc.proto";
option java_outer_classname = "ConsumerProto";
option java_multiple_files = true;
service ConsumerService {
rpc GetMessageSequence(MessageRequest) returns (MessageResponse) {}
}
message MessageRequest {
string family_id = 1;
string user_id = 2;
string device_id = 3;
int32 device_type = 4;
int32 type = 5;
int32 sequence = 6;
int32 classified_sequence = 7;
}
message MessageResponse {
int32 sequence = 1;
int32 classified_sequence = 2;
}
ConsumerService.java 文件
public class ConsumerService {
final Logger logger = LoggerFactory.getLogger(ConsumerService.class);
private Server server;
private void start() throws IOException {
this.server = ServerBuilder.forPort(8899).addService(new ConsumerServiceGrpcImpl()).build().start();
logger.info("ConsumerServiceGrpcImpl server started!");
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
logger.info("关闭jvm");
ConsumerService.this.stop();
}));
}
private void stop() {
if(null != this.server) {
this.server.shutdown();
}
}
private void awaitTermination() throws InterruptedException {
if(null != this.server) {
this.server.awaitTermination();
}
}
public static void main(String[] args) throws IOException, InterruptedException {
ConsumerService server = new ConsumerService();
server.start();
server.awaitTermination();
}
}
ConsumerClient.java 文件
@Component
@Scope("prototype")
public class ConsumerClient {
final Logger logger = LoggerFactory.getLogger(ConsumerClient.class);
private ManagedChannel managedChannel;
private ConsumerServiceGrpc.ConsumerServiceBlockingStub blockingStub;
@Autowired
public ConsumerClient(@Value("${serviceip}") String serviceip){
managedChannel = ManagedChannelBuilder.forAddress(serviceip, 8899).usePlaintext().build();
blockingStub = ConsumerServiceGrpc.newBlockingStub(managedChannel);
}
public void shutdown() throws InterruptedException {
managedChannel.shutdown().awaitTermination(5, TimeUnit.SECONDS);
}
public MessageResponse getMessageSequence(Message msg){
MessageRequest messageRequest = MessageRequest.newBuilder()
.setDeviceId(msg.getDeviceId())
.build();
logger.info("==={}"+messageRequest.toString());
return blockingStub.getMessageSequence(messageRequest);
}
}
ConsumerServiceGrpcImpl.java 文件
public class ConsumerServiceGrpcImpl extends ConsumerServiceGrpc.ConsumerServiceImplBase {
final Logger logger = LoggerFactory.getLogger(ConsumerServiceGrpcImpl.class);
//private MongoDBMessageService service = (MongoDBMessageService)SpringContextUtil.getBeanByClass(MongoDBMessageService.class);
@Override
public void getMessageSequence(MessageRequest msg, StreamObserverresponseObserver) {
logger.info("接受到客户端信息: " + msg.toString());
//业务代码 service
MessageResponse response = MessageResponse.newBuilder().setSequence(1).setClassifiedSequence(2).build();
responseObserver.onNext(response);
responseObserver.onCompleted();
}
}
这里实现的业务就是消费mq消息,msg -> 处理 ->返回结果 ->写mongo
消费mq MessageConsumer.java 文件
public class MessageConsumer extends Logging implements MessageListener {
@Autowired
private MongoDBMessageService service;
@Autowired
ConsumerClient consumerClient;
@Override
public void onMessage(Message message) {
try {
String line = new String(message.getBody(), "UTF-8");
com.mongo.entity.Message msg = JSON.parseObject(line, com.mongo.entity.Message.class);
MessageResponse messageSequence = consumerClient.getMessageSequence(msg);
msg.setSequence(messageSequence.getSequence());
msg.setClassifiedSequence(messageSequence.getClassifiedSequence());
msg.setMessageId(Tools.getUUID());
logger.info("line======MessageConsumer======== {}", msg);
service.insert(msg, "message1");
} catch (Exception e) {
logger.error("MessageConsumer error.", e);
}
}
}