Spring Integration-如何将参数传递到服务激活器的方法中

时间:2018-08-13 12:32:05

标签: spring-integration

我需要在通过service-activator调用的方法中传递参数。我可以在header-richer的帮助下成功完成此操作。下面是工作代码段。

<int:chain input-channel="inChannel">
    <int:header-enricher>
        <int:header name="routeName" value="TestRoute" />
    </int:header-enricher>
    <int:service-activator ref="customLoggingRoute"
        method="logRoute">
    </int:service-activator>
</int:chain>


public Message logRoute(Message m, @Header("routeName") String routeName) {
    System.out.println("Inside route: " + routeName);
    return m;
}

但是我不想在标题中添加任何内容。有没有其他方法可以使我们在没有header-enricher的情况下完成同样的事情。

1 个答案:

答案 0 :(得分:0)

不,没有。调用者的Spring Integration合同是Messaging。因此,当我们之间只有一条消息时,我们无能为力。您可以拥有一个复杂的import random def queensol(n): """Find the number of solutions to placing Queens on a chessboard of size n""" size = n rng = random.Random() tries = 0 bd = list(range(size)) soln = [] while True: tries += 1 rng.shuffle(bd) correct = 0 for queen_index in range(size): if queen_noclash(bd, queen_index): correct += 1 board_valid = correct == size if board_valid: if bd not in soln: soln.append(list(bd)) print(soln) def no_diagonal(x1, y1, x2, y2): dx = abs(x1-x2) dy = abs(y1-y2) # print('dx',dx) # print('dy',dy) if dx == dy: return False else: return True def queen_noclash(bd, queen): correct = 0 for left_queen in range(queen): left_queen_x = left_queen left_queen_y = bd[left_queen] queen_x = queen queen_y = bd[queen] if no_diagonal(left_queen_x, left_queen_y, queen_x, queen_y): correct += 1 if correct == queen: return True else: return False queensol(4) 对象并通过它传输数据,也可以将数据移到标题中。

当然,您可以考虑使用payload,因为我们使用的是Java语言,并且您的流程位于同一线程中,但这会产生一些开销。

我认为您需要从消息传递理论入手,并在了解所有这些限制后回到我们身边。

https://www.enterpriseintegrationpatterns.com/