* GET /api/juhe/weather?city=丰台 查询实时天气(未来天数取配置默认值) * GET /api/juhe/weather?city=北京&futureNum=3 指定未来天气天数 - * GET /api/juhe/weather/raw?city=北京 返回原始 JSON,便于排查 * GET /api/juhe/soup 查询每日一句 - * GET /api/juhe/soup/raw 返回原始 JSON,便于排查 ** + *
天气与每日一句均带 Redis 缓存与每日调用限流,详见对应 Service。
+ * * @author cyf */ @RestController @RequestMapping("/api/juhe") public class JuheController { - private final JuheWeatherClient juheWeatherClient; - private final JuheSoupClient juheSoupClient; + private final JuheWeatherService juheWeatherService; + private final JuheSoupService juheSoupService; - public JuheController(JuheWeatherClient juheWeatherClient, JuheSoupClient juheSoupClient) { - this.juheWeatherClient = juheWeatherClient; - this.juheSoupClient = juheSoupClient; + public JuheController(JuheWeatherService juheWeatherService, JuheSoupService juheSoupService) { + this.juheWeatherService = juheWeatherService; + this.juheSoupService = juheSoupService; } /** @@ -45,19 +45,7 @@ public class JuheController { @GetMapping("/weather") public Result所有方法内部捕获异常并降级,保证 Redis 不可用时不会影响主流程:
+ *
+ * juhe:weather:{日期}:{城市}:{未来天数} 天气缓存(带 TTL)
+ * juhe:weather:call:{日期} 天气当天调用计数
+ * juhe:soup:pool 每日一句缓存池(Set,永久)
+ * juhe:soup:call:{日期} 每日一句当天调用计数
+ *
+ *
+ * @author cyf
+ */
+public final class JuheRedisKeys {
+
+ private static final String PREFIX = "juhe:";
+
+ private JuheRedisKeys() {
+ }
+
+ /** 天气缓存 key,按「日期 + 城市 + 未来天数」维度缓存。 */
+ public static String weather(String date, String city, Integer futureNum) {
+ return PREFIX + "weather:" + date + ":" + city + ":" + futureNum;
+ }
+
+ /** 天气当天调用计数 key。 */
+ public static String weatherCallCount(String date) {
+ return PREFIX + "weather:call:" + date;
+ }
+
+ /** 每日一句缓存池 key(Set,永久存储,用于去重与随机返回)。 */
+ public static String soupPool() {
+ return PREFIX + "soup:pool";
+ }
+
+ /** 每日一句当天调用计数 key。 */
+ public static String soupCallCount(String date) {
+ return PREFIX + "soup:call:" + date;
+ }
+}
diff --git a/src/main/java/com/cyf/devToolBox/juhe/soup/JuheSoupService.java b/src/main/java/com/cyf/devToolBox/juhe/soup/JuheSoupService.java
new file mode 100644
index 0000000..c285c80
--- /dev/null
+++ b/src/main/java/com/cyf/devToolBox/juhe/soup/JuheSoupService.java
@@ -0,0 +1,71 @@
+package com.cyf.devToolBox.juhe.soup;
+
+import com.cyf.devToolBox.juhe.JuheProperties;
+import com.cyf.devToolBox.juhe.exception.JuheApiException;
+import com.cyf.devToolBox.juhe.redis.JuheDailySupport;
+import com.cyf.devToolBox.juhe.redis.JuheRedisClient;
+import com.cyf.devToolBox.juhe.redis.JuheRedisKeys;
+import com.cyf.devToolBox.juhe.soup.model.JuheSoupResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+/**
+ * 每日一句业务编排:调用结果永久缓存 + 每日调用限流。
+ *
+ * 流程:
+ *流程:
+ *聚合数据 API · 实时调用演示
+