Reputation: 23
I am trying to run the publisher and subscriber, using spring binding.
made sure the destination(exchange) is created locally on the rabbit-mq.
publisher (app.yml)
spring:
cloud:
stream:
bindings:
output:
destination: HelloDestination
rabbitmq:
addresses: xxx.xxx.xx.xxx
Subscriber(app.yml)
spring:
cloud:
stream:
bindings:
input:
destination: HelloDestination
rabbitmq:
addresses: xxx.xxx.xx.xxx
server:
port: 8081
publisher (pom.yml)
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
Subscriber (pom.yml)
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
publisher (source java file)
@SpringBootApplication
@EnableBinding(Source.class)
public class Demo1Application {
//@Autowired
//private static MessageChannel output;
public static void main(String[] args) {
SpringApplication.run(Demo1Application.class, args);
String sampleMessage = "Hello";
Message<String> message =
MessageBuilder.withPayload("Hello World").build();
MessageChannel output = new DirectChannel();
output.send(message);
}
}
//consumer (source file)
@SpringBootApplication
@EnableBinding(Sink.class)
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
}
@StreamListener(Sink.INPUT)
public void listenerMethod(Message<String> message)
{
System.out.println("The Message is :"+message);
}
}
//----
After doing all, I see the exchange created and also the message on exchange. The consumer starts up just fine. but the producer chokes when trying to send the message with the error message
Exception in thread "main" org.springframework.messaging.MessageDeliveryException: Dispatcher has no subscribers for channel 'unknown.channel.name'.; nested exception is org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers, failedMessage=GenericMessage [payload=Hello World, headers={id=ccf86001-5dba-6c64-bc76-e1f58782de42, timestamp=1558883876384}], failedMessage=GenericMessage [payload=Hello World, headers={id=ccf86001-5dba-6c64-bc76-e1f58782de42, timestamp=1558883876384}]
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:77)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:461)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:401)
at com.example.demo.Demo1Application.main(Demo1Application.java:29)
Caused by: org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers, failedMessage=GenericMessage [payload=Hello World, headers={id=ccf86001-5dba-6c64-bc76-e1f58782de42, timestamp=1558883876384}]
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:138)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscri
I expected the message to be read.
Upvotes: 2
Views: 10005
Reputation: 174729
You need to get channel 'output' from the application context returned by the run() method instead of creating your own DirectChannel.
Upvotes: 0