首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Spring-Integration外部调用rest端点

如何从Spring-Integration外部调用rest端点
EN

Stack Overflow用户
提问于 2021-08-11 11:47:18
回答 2查看 42关注 0票数 0

我正在尝试从我的Spring-Integration项目连接外部端点。这是我的结构

IntegrationConfig.java

代码语言:javascript
复制
package com.demo.integration.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.demo.integration.bean.Program;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.IntegrationComponentScan;
import org.springframework.integration.annotation.Transformer;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.config.EnableIntegration;
import org.springframework.integration.json.JsonToObjectTransformer;
import org.springframework.integration.json.ObjectToJsonTransformer;
import org.springframework.integration.support.json.Jackson2JsonObjectMapper;
import org.springframework.messaging.MessageChannel;

@Configuration
@EnableIntegration
@IntegrationComponentScan
public class IntegrationConfig {

    @Bean
    public MessageChannel receiveChannel(){
        return new DirectChannel();
    }

    @Bean
    public MessageChannel replyChannel(){
        return new DirectChannel();
    }

    @Bean
    @Transformer(inputChannel = "integration.program.gateway.channel", outputChannel = "integration.program.objectToJson.channel")
    public ObjectToJsonTransformer objectToJsonTransformer(){
        return new ObjectToJsonTransformer(getMapper());
    }

    @Bean
    public Jackson2JsonObjectMapper getMapper(){
        ObjectMapper mapper = new ObjectMapper();
        return new Jackson2JsonObjectMapper(mapper);
    }

    @Bean
    @Transformer(inputChannel = "integration.program.jsonToObject.channel", outputChannel = "integration.program.jsonToObject.fromTransformer.channel")
    public JsonToObjectTransformer jsonToObjectTransformer(){
        return new JsonToObjectTransformer(Program.class);
    }
}

ProgramService.java

代码语言:javascript
复制
package com.demo.integration.service;

import com.demo.integration.bean.Program;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.support.MessageBuilder;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.stereotype.Component;

@Component
public class ProgramService {
    @ServiceActivator(inputChannel = "integration.program.objectToJson.channel", outputChannel = "integration.program.jsonToObject.channel")
    public Message<?> receiveMessage(Message<?> message){
        System.out.println("###############");
        System.out.println(message);
        System.out.println("###############");
        System.out.println("Object To JSON : "+message.getPayload());
        //Message<String> newMessage = MessageBuilder.withPayload(message.getPayload() + "Modified").build();
        return message;
    }

    @ServiceActivator(inputChannel = "integration.program.jsonToObject.fromTransformer.channel")
    public void processJsonToObject(Message<?> message){
        MessageChannel replyChannel = (MessageChannel) message.getHeaders().getReplyChannel();
        MessageBuilder.fromMessage(message);
        System.out.println("JSON To Object : "+message.getPayload());
        Program program = (Program)message.getPayload();
        Message<String> newMessage = MessageBuilder.withPayload(program.toString() + "Modified").build();
        replyChannel.send(newMessage);
    }
}

Program.java

代码语言:javascript
复制
package com.demo.integration.bean;


import java.io.Serializable;

public class Program implements Serializable {
    private String id;
    private String name;
    private String code;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    @Override
    public String toString() {
        return "Program{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", code='" + code + '\'' +
                '}';
    }
}

IntegrationController.java

代码语言:javascript
复制
package com.demo.integration.controller;

import com.demo.integration.bean.Program;
import com.demo.integration.service.IntegrationGateway;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/v1/integration")
public class IntegrationRestController {

    @Autowired
    private IntegrationGateway gateway;

    @GetMapping(value = "{name}")
    public String test(
            @PathVariable(value = "name") String name) {
        return gateway.sendMessage(name);
    }

    @PostMapping
    public String processProgram(@RequestBody Program program) {
        return gateway.processProgram(program);
    }
}

哪里是编写Rest端点连接调用的更好的地方?在Spring-Integration中使用RestTemplate或任何其他可用的接口类型是可行的吗?因为在这里我只需要启动一个调用,获取响应并将其发送回另一个通道。

EN

回答 2

Stack Overflow用户

发布于 2021-08-11 12:33:05

RestTemplate有点旧了,我推荐使用feignclient或webclient。

https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html

像这样:

代码语言:javascript
复制
@FeignClient(name = "segmentGroupClient", url = "${cdp.segment-group-base-url}")
public interface SegmentGroupClient {

    @PostMapping(value = "/segment-group",consumes = "application/json")
    ResponseEntity<SegmentGroupResponse> handle(@RequestBody SegmentGroupRequest request);
}

在你的apllication.properties中:

代码语言:javascript
复制
cdp.segment-group-base-url=http://url:port
票数 1
EN

Stack Overflow用户

发布于 2021-08-11 12:48:48

你展示了太多的自定义代码,但它们都没有指出你想要在哪里进行REST调用。不管怎样,Spring Integration有一个HTTP和WebFlux模块,让你在你的流程中有端点来调用另一端的REST服务,并等待响应,这将是你流程中下一个通道的回复消息有效负载。

在文档中查看更多信息:

https://docs.spring.io/spring-integration/docs/current/reference/html/http.html#http

https://docs.spring.io/spring-integration/docs/current/reference/html/webflux.html#webflux

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68741397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档