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
            

        

    

目录结构如下

grpc 简单实例_第1张图片

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, StreamObserver responseObserver) {
        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);
        }

    }
}

 

你可能感兴趣的:(netty)