grpc java 实例_grpc 简单实例

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

目录结构如下

bee429cf633e24fed06fabef3d5b90d7.png

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);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值