apache-thrift RPC

cooolr 于 2021-08-17 发布
# timeindex.thrift

service TimeIndex {
    map<binary,binary> get_news_message_by_id(
        1: i64 news_id
    ),
    map<i64, map<binary,binary>> get_news_message(
        1: string recallDict,
        2: i64 user_id,
        3: i64 member_id,
    ),
    map<binary,binary> get_news_hot_by_id(
        1: i64 news_id
    ),
    set<i64> update_timeindex_news()
}
# timeindex_server.py
import json
import thriftpy2
from thriftpy2.rpc import make_server
from recommend_api.common import news
from recommend_api.config import recommend_api_home
from recommend_api.common.preload import news_all_message_init

timeindex_thrift = thriftpy2.load("timeindex.thrift", module_name="timeindex_thrift")

class Dispatcher(object):
    def get_news_message_by_id(self, news_id):
        news_message = news.get_news_message_by_id(news_id)
        return news_message

    def get_news_message(self, recallDict, user_id=0, member_id=0):
        recallDict = json.loads(recallDict)
        news_message = news.get_news_message(recallDict, user_id, member_id)
        return news_message

    def get_news_hot_by_id(self, news_id):
        news_hot = news.get_news_hot_by_id(news_id)
        return news_hot
    
    def update_timeindex_news(self):
        return news.time_index_news_ids

if __name__ == "__main__":
    news_all_message_init(news_type=1)
    server = make_server(timeindex_thrift.TimeIndex, Dispatcher(), '0.0.0.0', 18002)
    server.serve()
# timeindex_client.py
import json
import thriftpy2
from thriftpy2.rpc import make_client

timeindex_thrift = thriftpy2.load("timeindex.thrift", module_name="timeindex_thrift")

client = make_client(timeindex_thrift.TimeIndex, '127.0.0.1', 18002)
dl = client.update_timeindex_news()
print(len(dl))
print(client.get_news_message_by_id(10078000))
print(client.get_news_hot_by_id(10078000))
print(client.get_news_message(json.dumps({"shortTagList":[{"score":0,"newsId":9569000,"recallStrategyName":"ShortTagARecallStrategy","sortStrategyName":"ShortTagASortStrategy","newsType":1}]})))