我们可以使用Spring Cloud流将消息发布到SOLACE中而无需在队列/主题上配置使用者吗?

时间:2019-03-21 16:51:22

标签: spring-cloud-stream solace subscriber

我试图在不配置使用者的情况下使用Spring Cloud Stream将消息发布到Solace中,并且出现此错误“ org.springframework.integration.MessageDispatchingException:Dispatcher没有订阅者”。

当我在同一队列中添加使用者(接收器)时,代码可以正常工作。

为什么在将消息发布到队列之前,我们需要让订阅者监听队列?

用于连接到Solace的代码

Spring Boot主类

@SpringBootApplication
@EnableDiscoveryClient
@Slf4j
@EnableBinding({SendReport.class}) 
public class ReportServerApplication {

    public static void main(final String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-server.xml");
        new SpringApplicationBuilder(ReportServerApplication.class).listeners(new EnvironmentPreparedListener())                                                   .run(args);
}

将频道连接到主题的类:

public interface SendReport {

    String TO_NMR = "solace-poc-outbound";

    @Output(SendReport.TO_NMR)
    MessageChannel output();

}

消息处理程序:

@Slf4j
@Component
@EnableBinding({SendReport.class})
public class MessageHandler {

    private SendReport sendReport;

    public MessageHandler(SendReport sendReport){
        this.sendReport = sendReport;
    }

    @Output(SendReport.TO_NMR)
    public void sendMessage(String request) {
        log.info("****************** Got this Report Request: " + request);
        var message = MessageBuilder.withPayload(request).build();
        sendReport.output().send(message);
    }
}

用于配置的属性:application.yml

spring:
  cloud:
    # spring cloud stream binding
    stream:
      bindings:
        solace-poc-outbound:
          destination: TOPIC_NAME
          contentType: text/plain

solace:
  java:
    host: tcp://xyz.abc.com
    #port: xxx
    msgVpn: yyy
    clientUsername: aaa

使用的依赖项:

'org.springframework.cloud:spring-cloud-stream',
'com.solace.spring.cloud:spring-cloud-starter-stream-solace:1.1.+'

2 个答案:

答案 0 :(得分:0)

根据您提供的有限信息,我不确定您要问什么。

Spring Cloud Stream定义了应用SourceProcessorSink的3种构造型。您所描述的似乎是Source类型的应用程序-一种不“消耗”任何东西而只产生的应用程序。 。 。,所以我不确定您指的是哪个消费者。 也许您可以将您的应用程序发布在github上的某个地方,以便我们看看。 另外,我建议您也参考our samples

答案 1 :(得分:0)

是的,您绝对可以将SCS与Solace结合使用以保证消息传递。就像奥列格(Oleg)所说,我们可能需要更多信息以确保我们给您正确的答案。从安慰角度看,您可以共享客户端配置文件和队列信息吗?我给出了有关如何使用solace cli获取此信息的示例,但您也可以通过soladmin,PubSub + Manager或SEMP来获取。

  1. 客户资料
    • 为了获取客户端配置文件,您需要从SCS solace活页夹配置中获取clientUsername,然后使用它来查找您的配置文件。
      • 在安慰cli show client-username <username> detail
    • 获取客户资料信息
      • 在安慰cli show client-profile <profile_name> detail
  2. 队列信息
    • 在安慰cli show queue <queue_name> subscriptions