feign session 调用_Spring Cloud Alibaba 开发案例之 Nacos 整合 Feign

点击▲关注 “爪哇笔记”   给公众号标星置顶

更多精彩 第一时间直达

f5e2347545f7b0bfd47c0b1f27601550.png

一、前言

前段时间,撸主为了调用小黄图API特意引入的Feign,这显然不是最优雅的使用方式。但是对于大部分中小公司来说,服务已经拆了辣么多了,基本能满足需求就可以了,什么熔断、集群啊可以都先一边靠靠。

这里先撸一个最贱单的例子分享给大家。

0faf9ce5d94bf484933cca733bb67bdf.png

二、组件

  • Spring-Boot 2.2.0.RELEASE

  • Spring-Cloud Greenwich.SR3

  • Spring-Cloud-Alibaba 2.1.0.RELEASE

  • Nacos 注册中心

  • Feign HTTP客户端

说明一下,Spring Cloud Alibaba 已在2019年8月1日顺利毕业,并在 Spring 官方正式挂牌,挂牌成功后的最新版本是2.1.0。

三、主项目

nacos-feign-server

nacos-feign-client

1.8

2.2.0.RELEASE

Greenwich.SR3

2.1.0.RELEASE

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-alibaba-nacos-discovery

org.springframework.cloud

spring-cloud-starter-openfeign

org.springframework.boot

spring-boot-dependencies

${spring-boot.version}

pom

import

org.springframework.cloud

spring-cloud-dependencies

${spring-cloud.version}

pom

import

com.alibaba.cloud

spring-cloud-alibaba-dependencies

${spring-cloud-alibaba.version}

pom

import

四、服务端

application.properties 配置:

# 项目contextPath 科帮网https://blog.52itstyle.vip

server.servlet.context-path=/

# 服务端口

server.port=8080

# session最大超时时间(分钟),默认为30

server.session-timeout=60

# tomcat最大线程数,默认为200

server.tomcat.max-threads=100

# tomcat的URI编码

server.tomcat.uri-encoding=UTF-8

# Nacos 注册中心

spring.application.name = nacos-discovery-server

spring.cloud.nacos.discovery.server-addr = 47.104.197.9:8848

简单的服务提供接口:

/**

* 启动类

*/

@SpringBootApplication

@RestController

public class Application {

private static final Logger logger = LoggerFactory.getLogger(Application.class);

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

logger.info("nacos-discovery-server启动");

}

@GetMapping("getMessage")

public String getMessage(){

return "来调戏我啊!!!";

}

}

五、客户端

application.properties 配置:

# 项目contextPath 科帮网https://blog.52itstyle.vip

server.servlet.context-path=/

# 服务端口

server.port=8081

# session最大超时时间(分钟),默认为30

server.session-timeout=60

# tomcat最大线程数,默认为200

server.tomcat.max-threads=100

# tomcat的URI编码

server.tomcat.uri-encoding=UTF-8

# Nacos 注册中心

spring.application.name = nacos-discovery-client

spring.cloud.nacos.discovery.server-addr = 47.104.197.9:8848

配置客户端调用接口:

/**

* 客户端调用

*/

@FeignClient(value = "nacos-discovery-server")

public interface FeignClientService {

@RequestMapping(value="/getMessage")

String getMessage();

}

客户端调用示例:

/**

* 启动类

*/

@SpringBootApplication

@RestController

@EnableFeignClients

public class Application {

private static final Logger logger = LoggerFactory.getLogger(Application.class);

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

logger.info("nacos-discovery-client启动");

}

@Autowired

private FeignClientService feignClientService;

@GetMapping("getMessage")

public String getMessage(){

return feignClientService.getMessage();

}

}

六、测试服务

分别启动 feign-server 和 feign-client,然后登录Nacos控制台,如果出现以下两个服务说明配置成功。

e1550ad7067a874a76fc2083d779f701.png

客户端访问 http://localhost:8081/getMessage 如果返回来调戏我啊说明调用成功。

七、小结

b85686185ec7bdb5ad399a0b09434356.png

cbb734ba80874792d459764714d3bf0f.gif

1. 分享几个有趣实用的福利给大家

2. 周末,撸一个鉴黄 API 给大家

3. 高速下载小视频神器,墙裂推荐

4. 深夜,给小黄图撸了一件漂亮的外壳

5. 小黄图升级了,接入更加强大的鉴黄功能

4e73b9bb6722cb1cacb9830b93d987d0.png

▲一个有温度的公众号,期待与你一起进步

要在Spring Cloud Feign中配置FastJson序列化,您需要完成以下步骤: 1. 添加FastJson依赖 在项目的pom.xml文件中,添加FastJson依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</version> </dependency> ``` 2. 创建FastJson转换器 创建一个FastJson转换器类,继承自Spring的HttpMessageConverter接口,并实现其方法。代码如下: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.serializer.SerializerFeature; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.Type; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; public class FastJsonHttpMessageConverter implements HttpMessageConverter<Object> { public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); private SerializerFeature[] serializerFeatures = new SerializerFeature[0]; private Feature[] parserFeatures = new Feature[0]; @Override public boolean canRead(Type type, Class<?> contextClass, MediaType mediaType) { return true; } @Override public boolean canWrite(Type type, Class<?> aClass, MediaType mediaType) { return true; } @Override public List<MediaType> getSupportedMediaTypes() { List<MediaType> mediaTypes = new ArrayList<>(); mediaTypes.add(MediaType.APPLICATION_JSON_UTF8); mediaTypes.add(MediaType.APPLICATION_JSON); mediaTypes.add(MediaType.TEXT_PLAIN); return mediaTypes; } @Override public Object read(Type type, Class<?> contextClass, HttpInputMessage inputMessage) throws IOException { InputStream inputStream = inputMessage.getBody(); return JSON.parseObject(inputStream, DEFAULT_CHARSET, type, parserFeatures); } @Override public void write(Object o, Type type, MediaType mediaType, HttpOutputMessage outputMessage) throws IOException { HttpHeaders headers = outputMessage.getHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); String jsonString = JSON.toJSONString(o, serializerFeatures); OutputStream outputStream = outputMessage.getBody(); outputStream.write(jsonString.getBytes(DEFAULT_CHARSET)); outputStream.flush(); } public SerializerFeature[] getSerializerFeatures() { return serializerFeatures; } public void setSerializerFeatures(SerializerFeature[] serializerFeatures) { this.serializerFeatures = serializerFeatures; } public Feature[] getParserFeatures() { return parserFeatures; } public void setParserFeatures(Feature[] parserFeatures) { this.parserFeatures = parserFeatures; } } ``` 3. 配置FastJson转换器 在Spring的配置类中,创建一个FastJson转换器的bean,并将其注册到Spring的HttpMessageConverters中。代码如下: ```java import com.alibaba.fastjson.serializer.SerializerFeature; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.List; @Configuration public class FeignConfiguration { @Bean public HttpMessageConverter fastJsonHttpMessageConverter() { return new FastJsonHttpMessageConverter(); } @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); List<HttpMessageConverter<?>> messageConverters = new ArrayList<>(); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setObjectMapper(new ObjectMapper()); messageConverters.add(converter); messageConverters.add(fastJsonHttpMessageConverter()); restTemplate.setMessageConverters(messageConverters); return restTemplate; } } ``` 4. 配置Feign Client 在Feign Client的配置类中,使用@FeignClient注解的configuration属性,将FastJson转换器的bean引入到Feign Client中。代码如下: ```java import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableFeignClients(defaultConfiguration = {FeignConfiguration.class}) public class FeignClientConfiguration { } ``` 完成以上步骤之后,您就可以在Spring Cloud Feign中使用FastJson作为序列化工具了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值