Можем ли мы публиковать сообщения в SOLACE с использованием потока Spring Cloud без настройки потребителя в очереди / теме? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь отправлять сообщения в Solace с помощью Spring Cloud Stream без настройки потребителя, и я получаю эту ошибку "org.springframework.integration.MessageDispatchingException: у Dispatcher нет подписчиков".

Когда я добавляю потребителя (Sink) в ту же очередь, код работает нормально.

Зачем нам нужно, чтобы подписчик слушал очередь, прежде чем отправлять сообщение в очередь?

Код, используемый для подключения к Утешению

Spring Boot Main Class

@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 голосов
/ 21 марта 2019

Да, вы обязательно можете использовать SCS с Solace для гарантированного обмена сообщениями.Как сказал Олег, нам, вероятно, потребуется немного больше информации, чтобы мы могли дать вам правильный ответ.С точки зрения утешения, можете ли вы поделиться информацией о клиентском профиле и очереди?Я привел примеры того, как получить эту информацию, используя solace cli, но вы также можете получить ее через soladmin, PubSub + Manager или через SEMP.

  1. Профиль клиента
    • Для того, чтобы получить свой профиль клиента, вам понадобится ваше clientUsername из вашей конфигурации SCS привязки утешения и использовать его для поиска вашего профиля.
      • На утешении cli show client-username <username> detail
    • Получить информацию о профиле клиента
      • На утешении cli show client-profile <profile_name> detail
  2. Информация об очереди
    • На утешении cli show queue <queue_name> subscriptions
0 голосов
/ 21 марта 2019

Я не уверен, что вы спрашиваете на основании предоставленной вами ограниченной информации.

Spring Cloud Stream определяет 3 стереотипа приложений Source, Processor, Sink.Похоже, вы описываете приложение типа Source - приложение, которое НЕ потребляет ничего и только производит.,., поэтому я не уверен, на какого потребителя вы ссылаетесь.Возможно, вы можете разместить свое приложение где-нибудь на github, чтобы мы могли посмотреть.Кроме того, я бы рекомендовал посмотреть наших образцов .

...