@Bean
public ThreadPoolTaskExecutor clientInboundChannelExecutor() {
TaskExecutorRegistration reg = getClientInboundChannelRegistration().getOrCreateTaskExecRegistration();
ThreadPoolTaskExecutor executor = reg.getTaskExecutor();
executor.setThreadNamePrefix("clientInboundChannel-");
return executor;
}
当我尝试在WebSocketConfig中重写此方法时,“来自ChannelRegistration类型的方法getOrCreateTaskExecRegistration()不可见”,因为在AbstractMessageBrokerConfiguration中它受到保护....
protected final ChannelRegistration getClientInboundChannelRegistration() {
if (this.clientInboundChannelRegistration == null) {
ChannelRegistration registration = new ChannelRegistration();
configureClientInboundChannel(registration);
this.clientInboundChannelRegistration = registration;
}
return this.clientInboundChannelRegistration;
}
我不完全理解WebSocketMessageBrokerConfigurationSupport层次结构或WebSocketMessageBrokerConfigurer接口。我只是玩弄重写我的定制工作所需的东西。
不确定它是否相关,但我不需要外部代理,因为我的应用程序目前不向所有连接的订阅者发送任何数据,而且不太可能最终发送数据。与守护进程类型的java websocket客户机的通信是点对点的,但是浏览器中的web ui websocket确实使用subscribe来获取实时数据,因此这是一个方便的设置(而不是spring integration direct channel),并且有关于如何设置的明确来源--但我不确定这是最有效的应用程序设计。spring-framework参考文档中描述的WebSocket消息传递体系结构上的STOMP是最全面的方法,因为这是我的第一个spring项目。
我应该如何将spring-reactor集成到我的标准spring framework 4 STOMP Over WebSocket消息传递架构中?
如果在clientInboundChannelExecutor和clientOutboundChannelExecutor中配置RingBufferAsyncTaskExecutor代替ThreadPoolTaskExecutor是正确的方法,那么应该如何执行呢?
实际上RingBufferAsyncTaskExecutor
不是ThreadPoolTaskExecutor
,所以不能这样使用它。
您可以简单地从AbstractWebSocketMessageBrokerConfigurer
impl重写ClientInbound(出站)通道
beans,只需使用@enableWebSocketMessageBroker
:
@Configuration
@EnableWebSocketMessageBroker
@EnableReactor
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@autowired
Environment reactorEnv;
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry configurer) {
configurer.setApplicationDestinationPrefixes("/app");
configurer.enableSimpleBroker("/topic", "/queue");
}
@Bean
public AbstractSubscribableChannel clientInboundChannel() {
ExecutorSubscribableChannel channel = new ExecutorSubscribableChannel(new RingBufferAsyncTaskExecutor(this.reactorEnv));
ChannelRegistration reg = getClientOutboundChannelRegistration();
channel.setInterceptors(reg.getInterceptors());
return channel;
}
}
请注意Spring集成中的WebSocket支持。
问题内容: 我有一个使用Spring Batch和Spring MVC的应用程序。我可以将Spring Batch Admin单独部署,并与我的应用程序使用的数据库一起使用,尽管我想将其集成到我自己的应用程序中,还可能会修改其中一些视图。 有没有简单的方法可以做到这一点,还是我必须将其分叉然后从那里去? 问题答案: 根据这个线程显然有一个简单的方法; 在以下位置为Batch Admin定义Disp
我使用spring-batch和Spring-Boot完成了一个项目。 业务模式MySQL 和修改的application.properties: 这是副作用。除了java配置之外,我的应用程序还使用了applicationContext.xml。
作为项目Reactor的用户,也想使用Spring集成,我想执行以下操作,这将以这样的方式工作: 一开始,我认为解决方案是执行以下错误代码: 当然,由于问题,它无法工作。我想知道如何一个接一个地执行操作(例如,在CockroachDB写入完成之前不要继续脉冲星写入,如果第一次操作失败,请停止这些消息的流)。 我正在考虑使用Spring集成事务支持,但我担心它在Retor中的使用。 我还看到有一种叫
我们从项目一开始就没有使用过Flyway。我们正处于先进的发展状态。让我们在与詹金斯的项目中开始使用Flyway。 从留档,我了解到的是: 将开发模式(DDL和DML)的备份作为SQL脚本文件,提供一个像V1_0_1__initial.SQL这样的文件名。 使用“flyway clean”清理开发数据库。 开发数据库基线 “飞行路线基线 -基线版本 =1.0.0” 现在,执行"flyway迁移",
我们从项目开始就没有使用过Flyway。我们正处于先进的发展状态。专家评论建议在我们的项目中使用Flyway。 问题是我们已经将部分服务(微服务)转移到了另一个测试环境中。 正确实现Flyway的最佳方式是什么?这些要求是: > 在开发环境中,无需更改已存在的架构。但是所有新脚本都应该使用Flyway来完成。 在测试环境中,不需要改变已经存在的模式。但是,当我们将项目从开发迁移到测试时,测试环境中
问题内容: 区别在于消息来自Http端点而不是JMS队列。问题是由于某些原因而无法填充消息通道,或者Flux.from()不会拾取它。日志条目显示GenericMessage是从Http Integration流中创建的,并带有有效负载作为路径变量,但是没有入队/未发布到通道?我尝试过并且 没有任何区别,事件流为空。这是代码: UPDATE1: build.gradle 更新2 当和在一个文件中定