소스 검색

通过RestTemplate调用远程用户接口,测试feignclient调用,但是返回错误

yaobo 7 년 전
부모
커밋
e480e6f909

+ 19 - 5
pom.xml

@@ -14,7 +14,9 @@
 	<parent>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>1.5.7.RELEASE</version>
+		<version>1.3.5.RELEASE</version>
+		<!--<version>1.5.7.RELEASE</version>-->
+		<!--1.5.7会报feign错误-->
 		<relativePath/> <!-- lookup parent from repository -->
 	</parent>
 
@@ -58,6 +60,14 @@
 		<!--  springCloud 依赖-->
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-hystrix</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
+			<artifactId>spring-cloud-starter-feign</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-eureka</artifactId>
 		</dependency>
 		<dependency>
@@ -68,10 +78,14 @@
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-config</artifactId>
 		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-actuator</artifactId>
-		</dependency>
+		<!--<dependency>-->
+			<!--<groupId>org.springframework.boot</groupId>-->
+			<!--<artifactId>spring-boot-starter-actuator</artifactId>-->
+		<!--</dependency>-->
+		<!--<dependency>-->
+			<!--<groupId>org.springframework.cloud</groupId>-->
+			<!--<artifactId>spring-cloud-starter-hystrix</artifactId>-->
+		<!--</dependency>-->
 
 		<!--log 相关-->
 		<dependency>

+ 9 - 0
src/main/java/cn/efunbox/audio/AudioApplication.java

@@ -2,12 +2,21 @@ package cn.efunbox.audio;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.web.client.RestTemplate;
 
 @SpringBootApplication
+@EnableDiscoveryClient
+@EnableFeignClients
 public class AudioApplication {
 
 	public static void main(String[] args) {
 		SpringApplication.run(AudioApplication.class, args);
 	}
+
 }

+ 41 - 0
src/main/java/cn/efunbox/audio/clients/UserFeign.java

@@ -0,0 +1,41 @@
+package cn.efunbox.audio.clients;
+
+import cn.efunbox.audio.utils.ApiResult;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Created by yao on 17-10-25.
+ */
+//@FeignClient(value = "IAAS-USER", fallback = UserFeignHystrix.class)
+@FeignClient(value = "iaas-user")
+public interface UserFeign {
+
+    @RequestMapping(value = "/v1/users", method = RequestMethod.POST)
+    public String Register(
+//            @RequestHeader(value = "Content-Type",required = false) String contentType,
+            @RequestHeader(value = "bizCode",required = false) String bizCode,
+            @RequestHeader(value = "requestId",required = false) String requestId,
+            @RequestHeader(value = "appCode",required = false) String appCode,
+            @RequestHeader(value = "platform",required = false) String platform,
+            @RequestHeader(value = "os",required = false) String os,
+            @RequestHeader(value = "dist",required = false) String dist,
+            @RequestHeader(value = "userIp",required = false) String userIp,
+            @RequestHeader(value = "appVer",required = false) String appVer,
+            @RequestHeader(value = "terminal",required = false) String terminal,
+            @RequestParam(value = "entry") String entry,
+            @RequestParam(value = "entryType") String entryType,
+            @RequestParam(value = "passwd") String passwd,
+            @RequestParam(value = "avatar") String avatar,
+            @RequestParam(value = "nickname") String nickname);
+
+    @RequestMapping(value = "/v1/users/{uid}", method = RequestMethod.GET)
+    public String getUser(@PathVariable(value = "uid")  String uid);
+
+}

+ 37 - 0
src/main/java/cn/efunbox/audio/clients/UserFeignHystrix.java

@@ -0,0 +1,37 @@
+package cn.efunbox.audio.clients;
+
+import cn.efunbox.audio.utils.ApiResult;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@Component
+public class UserFeignHystrix implements UserFeign {
+
+    @Override
+    public String Register(
+//            @RequestHeader(value = "Content-Type") String contentType,
+            @RequestHeader(value = "bizCode") String bizCode,
+            @RequestHeader(value = "requestId") String requestId,
+            @RequestHeader(value = "appCode") String appCode,
+            @RequestHeader(value = "platform") String platform,
+            @RequestHeader(value = "os") String os,
+            @RequestHeader(value = "dist") String dist,
+            @RequestHeader(value = "userIp") String userIp,
+            @RequestHeader(value = "appVer") String appVer,
+            @RequestHeader(value = "terminal") String terminal,
+            @RequestParam(value = "entry") String entry,
+            @RequestParam(value = "entryType") String entryType,
+            @RequestParam(value = "passwd") String passwd,
+            @RequestParam(value = "avatar") String avatar,
+            @RequestParam(value = "nickname") String nickname) {
+
+        return "error";
+    }
+
+    public String getUser(@PathVariable(value = "uid")  String uid){
+        return "error";
+    }
+
+}

+ 65 - 0
src/main/java/cn/efunbox/audio/clients/UserHttp.java

@@ -0,0 +1,65 @@
+package cn.efunbox.audio.clients;
+
+import com.alibaba.fastjson.JSON;
+import com.sun.tools.javac.util.List;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Created by yao on 17-10-25.
+ */
+@Service
+public class UserHttp {
+
+    @Value("${iaas.user.register}")
+    private  String urlRegister;
+    @Value("${iaas.user.audio.bizCode}")
+    private String bizCode;
+    @Value("${iaas.user.audio.appCode}")
+    private String appCode;
+    @Value("${iaas.user.audio.platform}")
+    private String platform;
+    @Value("${iaas.user.audio.os}")
+    private String os;
+    @Value("${iaas.user.audio.appVer}")
+    private String appVer;
+    @Value("${iaas.user.audio.terminal}")
+    private String terminal;
+    @Value("${iaas.user.audio.entryType}")
+    private String entryType;
+
+    public String Register(String requestId, String dist, String userIp, String idDeivce, String passwd) {
+        HttpHeaders requestHeaders = new HttpHeaders();
+        requestHeaders.setContentType(MediaType.APPLICATION_JSON);
+        requestHeaders.add("bizCode", bizCode);
+        requestHeaders.add("requestId", requestId);
+        requestHeaders.add("appCode", appCode);
+        requestHeaders.add("platform", platform);
+        requestHeaders.add("os", os);
+        requestHeaders.add("dist", dist);
+        requestHeaders.add("userIp", userIp);
+        requestHeaders.add("appVer", appVer);
+        requestHeaders.add("terminal", terminal);
+
+        Map<String, String> map = new HashMap<String, String>();
+        map.put("entry", idDeivce);
+        map.put("entryType", entryType);
+        map.put("passwd", passwd);
+        map.put("avatar", "");
+        map.put("nickname", "");
+
+        RestTemplate restTemplate = new RestTemplate();
+        return restTemplate.postForEntity(urlRegister, new HttpEntity<Map>(map, requestHeaders), String.class).getBody();
+    }
+
+}

+ 2 - 2
src/main/java/cn/efunbox/audio/config/Config.java

@@ -54,11 +54,11 @@ public class Config extends WebMvcConfigurerAdapter{
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(authInterceptor())
                 .addPathPatterns("/audio/search")
-                .excludePathPatterns("/device/**");
+                .excludePathPatterns("/device/**", "/error");
 
         registry.addInterceptor(adminInterceptor())
                 .addPathPatterns("/**", "/device/update", "/device/delete")
-                .excludePathPatterns("/device/**", "/admin/login", "/audio/search");
+                .excludePathPatterns("/device/**", "/error", "/admin/login", "/audio/search");
 
         registry.addInterceptor(ignoreOptionsInterceptor())
                 .addPathPatterns("/**");

+ 61 - 4
src/main/java/cn/efunbox/audio/controller/DeviceController.java

@@ -1,23 +1,25 @@
 package cn.efunbox.audio.controller;
 
+import cn.efunbox.audio.clients.UserFeign;
+import cn.efunbox.audio.clients.UserHttp;
 import cn.efunbox.audio.entity.Channel;
 import cn.efunbox.audio.entity.Device;
 import cn.efunbox.audio.entity.Grouping;
 import cn.efunbox.audio.service.ChannelService;
 import cn.efunbox.audio.service.DeviceService;
 import cn.efunbox.audio.utils.ApiCode;
+import cn.efunbox.audio.utils.ApiResult;
 import cn.efunbox.audio.utils.Common;
 import cn.efunbox.audio.utils.HttpUtil;
+import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * Created by yao on 17-9-26.
@@ -33,6 +35,61 @@ public class DeviceController {
     @Autowired
     ChannelService channelService;
 
+    @Autowired
+    UserFeign userFeign;
+    @Autowired
+    UserHttp userHttp;
+
+    @Value("${iaas.user.register}")
+    private  String urlRegister;
+    @Value("${iaas.user.audio.bizCode}")
+    private String bizCode;
+    @Value("${iaas.user.audio.appCode}")
+    private String appCode;
+    @Value("${iaas.user.audio.platform}")
+    private String platform;
+    @Value("${iaas.user.audio.os}")
+    private String os;
+    @Value("${iaas.user.audio.appVer}")
+    private String appVer;
+    @Value("${iaas.user.audio.terminal}")
+    private String terminal;
+    @Value("${iaas.user.audio.entryType}")
+    private String entryType;
+
+    @RequestMapping(value = "/feign")
+    public void Feigh(HttpServletRequest request, HttpServletResponse response,
+            @RequestParam("idChannel")String idChannel, @RequestParam("mobile")String mobile){
+        String ip = HttpUtil.getRemortIP(request);
+        System.out.println("start:"+ip);
+        String res = userHttp.Register(UUID.randomUUID().toString().substring(0, 31),
+                idChannel, ip, mobile, mobile);
+//        String res = userFeign.Register(
+////                "application/json",
+//                bizCode,
+////                UUID.randomUUID().toString().substring(0, 31),
+//                "8723-4327-64238-asdkja",
+//                appCode,
+//                platform,
+//                os,
+//                "1111",
+//                "123.126.111.3",
+//                appVer,
+//                terminal,
+//                mobile,
+//                entryType,
+//                "123456",
+//                "",
+//                ""
+//        );
+//        System.out.println(res);
+//        Map map = JSONObject.parseObject(res);
+//        HttpUtil.responseOkData(request, response, map);
+//        System.out.println("res:"+res);
+//        String res = userFeign.getUser("c26ceb09-4e85-40ba-a81d-1535d142cc43");
+//        System.out.println(res);
+    }
+
     @RequestMapping(value = "/token" ,method = RequestMethod.POST)
     public Map Login(@RequestParam long id, @RequestParam String token){
         Map map = new HashMap<>();

+ 11 - 1
src/main/java/cn/efunbox/audio/utils/HttpUtil.java

@@ -82,7 +82,17 @@ public class HttpUtil {
         }
     }
 
-
+    /**
+     * 获取客户端的ip
+     * @param request
+     * @return
+     */
+    public static String getRemortIP(HttpServletRequest request) {
+        if (request.getHeader("x-forwarded-for") == null) {
+            return request.getRemoteAddr();
+        }
+        return request.getHeader("x-forwarded-for");
+    }
 
 
 }

+ 22 - 0
src/main/resources/application.properties

@@ -1,6 +1,28 @@
 # 监听端口
 server.port=8081
 
+
+########################################################
+### Spring Cloud 基本配置;
+########################################################
+spring.application.name=audio-consumer
+##设置是否向注册中心注册,默认是true
+#eureka.client.register-with-eureka=false
+##是否需要去检索寻找服务,默认是true
+#eureka.client.fetch-registry=false
+#指定注册中心
+eureka.client.serviceUrl.defaultZone= http://eureka3:8766/eureka/
+
+iaas.user.register=http://zuul.efunbox.cn/ucenter/v1/users
+iaas.user.audio.bizCode=1002
+iaas.user.audio.appCode=1002
+iaas.user.audio.platform=4
+iaas.user.audio.os=0
+iaas.user.audio.appVer=1.0.0
+iaas.user.audio.terminal=audio
+iaas.user.audio.entryType=1
+
+
 ########################################################
 ### MYSQL基本配置;
 ########################################################

+ 18 - 6
src/test/java/cn/efunbox/audio/AudioApplicationTests.java

@@ -1,24 +1,24 @@
 package cn.efunbox.audio;
 
+import cn.efunbox.audio.clients.UserFeign;
+import cn.efunbox.audio.clients.UserHttp;
 import cn.efunbox.audio.entity.Device;
 import cn.efunbox.audio.plugin.AliStsOssAuth;
-import cn.efunbox.audio.plugin.AliStsServiceSample;
 import cn.efunbox.audio.service.DeviceService;
 import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
+//import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.mock.web.MockServletContext;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.web.WebAppConfiguration;
 
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.UUID;
 
 @RunWith(SpringJUnit4ClassRunner.class)
-@SpringBootTest
+//@SpringBootTest	//1.5.7才支持
 public class AudioApplicationTests {
 
 	@Autowired
@@ -30,6 +30,9 @@ public class AudioApplicationTests {
 	@Autowired
 	private AliStsOssAuth aliStsOssAuth;
 
+	@Autowired
+	private UserHttp userHttp;
+
 	@Test
 	public void contextLoads() {
 		for(int i=0;i<10;i++){
@@ -68,4 +71,13 @@ public class AudioApplicationTests {
 		String url = aliStsOssAuth.AuthUrl("http://efunaudio.oss-cn-beijing.aliyuncs.com/audio/001/00103035/00103035018.mp3");
 	}
 
+	@Test
+	public void RegisterUser(){
+		System.out.println("start");
+//		String res = userHttp.Register();
+//		String res = userRibbon.Register();
+//		String res = userFeign.Register(1,2);
+//		System.out.println(res);
+	}
+
 }