spring-integration连接http

在一些简单的应用中,可以用spring-integration来获取http请求内容,从而实现简单的http接口调用,相对于HttpClient要更简单一些,个人理解可以在一些简单的场景下使用,首先需要引入spring-integration-http

<dependency>
   <groupId>org.springframework.integration</groupId>
   <artifactId>spring-integration-http</artifactId>
   <version>5.3.1.RELEASE</version>
</dependency>

http的配置与其它的spring-integration配置有所区别,这里的入站管道实际上是http请求外网服务器,这里会立即返回数据,而不是像tcp或mqtt那样异步调用数据处理接口,配置如下:

package org.noka.serialservice.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.integration.http.outbound.AbstractHttpRequestExecutingMessageHandler;
import org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler;
import org.springframework.integration.http.support.DefaultHttpHeaderMapper;
import org.springframework.messaging.MessageHandler;

/** ----------------------------------------------
 * http请求配置
 * @author xiefangjian@163.com
 * @version 1.0.0
 ** -------------------------------------------**/
@EnableIntegration
@Configuration
public class HttpConfig {

    private String url="http://192.168.50.46:8088/";//http服务器地址
    /**
     * http请求配置
     * 这量数据管道名称为 http_out
     * @return
     */
    @Bean
    @ServiceActivator(inputChannel = "http_out")
    public MessageHandler httpHandler(){
        AbstractHttpRequestExecutingMessageHandler http = new HttpRequestExecutingMessageHandler(url);
        DefaultHttpHeaderMapper httpHeaderMapper= new DefaultHttpHeaderMapper();
        httpHeaderMapper.setOutboundHeaderNames("*");//允许自定义协议的头部信息
        http.setHttpMethod(HttpMethod.POST);//post方式
        http.setCharset("UTF-8");//编码方式
        http.setHeaderMapper(httpHeaderMapper);
        http.setExpectedResponseType(String.class);//请求以纯字符串的方式返回
        return http;
    }
}

需要请求一个http服务时,同样是通过一个接口来完成,这个接口实现方式如下:

package org.noka.serialservice.service;

import org.springframework.integration.annotation.Gateway;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
import java.util.Map;
/**----------------------------------------------------------------
 * 发送消息网关,其它需要发向服务器发送消息时,调用该接口
 * @author  xiefangjian@163.com
 * @version  1.0.0
 **--------------------------------------------------------------**/
@MessagingGateway
@Component
public interface MsgGateway {
    
    /**
     * http请求接口
     * @param out 需要发送的内容
     * @return
     */
    @Gateway(requestChannel = "http_out")
    String Post(Message<Map<String,String>> out);
}

后面在任何地方都可以使用MsgGateway接口来请求服务器的内容,像下面这样

//-----需要传到服务器上的参数----------------------------------------
Map<String,String> pars = new HashMap<>();
pars.put("par1","xiefangjian");//参数1
Message<Map<String,String>> ms = MessageBuilder.withPayload(pars)
     .setHeader(HttpHeaders.ACCEPT_LANGUAGE,"zh-CN")//Accept-Language 设置为zh-CN
     .setHeader("aaaa","xiefangjian")//自定义协议头
     .build();
String body = msgGateway.Post(ms);//这里body为服务器返回的内容

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Integration WebFlux提供了一种基于反应式编程模型的流式交互方式,它可以让客户端和服务端之间实现数据的实时推送和响应。 以下是使用Spring Integration WebFlux实现客户端和服务端流式交互的步骤: 1. 配置服务端 首先,需要配置一个WebFlux服务器,以便客户端可以连接到它并发送请求。可以使用Spring Boot来创建WebFlux服务器,如下所示: ```java @SpringBootApplication public class WebFluxServer { public static void main(String[] args) { SpringApplication.run(WebFluxServer.class, args); } @Bean public RouterFunction<ServerResponse> route(ServerHandler handler) { return RouterFunctions.route(RequestPredicates.GET("/stream"), handler::stream); } } ``` 在此示例中,创建了一个WebFlux服务器,并注册了一个名为“route”的路由函数,将HTTP GET请求映射到名为“stream”的处理程序方法上。 2. 创建服务端处理程序 接下来,需要创建一个处理程序,该处理程序将接收来自客户端的请求,并将其转换为流式响应。可以使用Spring Integration WebFlux提供的FluxSink来实现这一点,如下所示: ```java @Component public class ServerHandler { public Mono<ServerResponse> stream(ServerRequest request) { Flux<String> flux = Flux.interval(Duration.ofSeconds(1)) .map(l -> "Tick #" + l) .take(10); return ServerResponse.ok() .contentType(MediaType.TEXT_EVENT_STREAM) .body(BodyInserters.fromProducer(flux, String.class)); } } ``` 在此示例中,创建了一个名为“stream”的处理程序方法,该方法将返回一个Flux<String>实例,该实例每秒发出一次字符串“Tick #x”,其中x是自增的数字。然后,使用ServerResponse.ok()创建一个响应对象,并将其内容类型设置为text/event-stream。最后,使用BodyInserters.fromProducer()方法将Flux<String>实例转换为响应体。 3. 配置客户端 与服务端类似,客户端也需要配置一个WebFlux客户端,以便可以连接到服务端并发送请求。可以使用Spring Boot来创建WebFlux客户端,如下所示: ```java @SpringBootApplication public class WebFluxClient { public static void main(String[] args) { SpringApplication.run(WebFluxClient.class, args); } @Bean public CommandLineRunner run(WebClient client) { return args -> { client.get() .uri("http://localhost:8080/stream") .accept(MediaType.TEXT_EVENT_STREAM) .exchange() .flatMapMany(response -> response.bodyToFlux(String.class)) .subscribe(System.out::println); }; } } ``` 在此示例中,创建了一个WebFlux客户端,并使用CommandLineRunner接口将其运行在Spring Boot应用程序中。在run()方法中,创建了一个WebClient实例,并使用它来发送HTTP GET请求到服务端的“/stream”端点。然后,将响应体转换为Flux<String>实例,并使用subscribe()方法打印每个字符串。 4. 运行客户端和服务端 现在,可以同时运行客户端和服务端应用程序,并观察到服务端每秒向客户端发送一条消息,直到发送了10条消息。 通过上述步骤,就可以使用Spring Integration WebFlux实现客户端和服务端之间的流式交互。这种方式可以用于实现实时通信、事件驱动的处理等应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值