我正在尝试使用java pubsub客户端来获取命名主题:
@Value("projects/${pubsub.projectId}/topics/${environment}-events")
String topic;
Pubsub client = PubsubUtils.getClient();
if (enabled) {
logger.info("PubSub event logging: enabled");
Topic t = null;
try {
t = client.projects().topics().get(topic).execute();
if (t != null) {
logger.info("PubSub topic {} already exists. Continuing ...", topic);
return client;
}
} catch (Exception ex) {
logger.info("Failed to get topic: {}", topic, ex);
}
// create topic
if (t == null) {
createTopic(client);
}
} else {
logger.info("PubSub event logging: disabled");
}
不幸的是,当我用
运行时String topic = "projects/projectid/topics/topicid";
我不断回复404回复:
Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
</style>
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>That’s an error.</ins>
<p>The requested URL <code>/v1/projects%2Fbrightcove-rna-master%2Ftopics%2Fdev_achauhan-events</code> was not found on this server. <ins>That’s all we know.</ins>
at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
at com.brightcove.collector.beans.PubSubProducerBean.createTopic(PubSubProducerBean.java:54)
at com.brightcove.collector.beans.PubSubProducerBean.getPublisher(PubSubProducerBean.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162)
... 54 more
从它的外观来看,客户端库似乎是url转义网址中的主题名称,而google服务器失败。
有没有办法解决这个或更好的方法让google api客户端无法逃脱主题名称。
编辑根据要求,这是完整的来源:
@Value("projects/${pubsub.projectId}/topics/${environment}-events")
String topic;
Pubsub getPublisher() throws Exception {
Pubsub client = PubsubUtils.getClient();
if (enabled) {
logger.info("PubSub event logging: enabled");
Topic t = null;
try {
t = client.projects().topics().get(topic).execute();
if (t != null) {
logger.info("PubSub topic {} already exists. Continuing ...", topic);
return client;
}
} catch (Exception ex) {
logger.info("Failed to get topic: {}", topic, ex);
}
// create topic
if (t == null) {
createTopic(client);
}
} else {
logger.info("PubSub event logging: disabled");
}
return client;
}
Topic createTopic(Pubsub client) throws IOException {
return client.projects().topics().create(topic, new Topic().setName(topic)).execute();
}
答案 0 :(得分:2)
您的项目中是否还有其他Google API? 我刚刚解决了这个问题。我使用Google DataStore API和jar google-http-client 1.15将主题从'/'编码为'%2F',这是不正确的。 您可以从其他Google API中排除google-http-client 1.15
Maven code:
<exclusion>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
</exclusion>
请使用1.20或更高版本! 正确的主题如下。
<code>/v1/projects/brightcove-rna-master/topics/dev_achauhan-events</code>