我试图通过使用Jms Qpid客户端的Spring Boot应用程序使用Apache Qpid。我可以对其进行配置,但当我尝试从队列接收消息时,记录器正在打印:
Dispatcher(918480905)Received a message(878303980)[1] from queue 1 )without a handler - rejecting(requeue)...
这是我的代码:
JMS配置。Java语言
@Configuration
public class JmsConfiguration {
@Primary
@Bean
public Context createContext()
{
Properties properties=new Properties();
System.setProperty("IMMEDIATE_PREFETCH", "true");
Context context=null;
try {
properties.load(this.getClass().getResourceAsStream("application.properties"));
context = new InitialContext(properties);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return context;
}
@Primary
@Bean
public ConnectionFactory createConnectionFactory(Context context)
{
ConnectionFactory connectionFactory=null;
try {
connectionFactory = (ConnectionFactory) context.lookup("qpidConnectionFactory");
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connectionFactory;
}
@Primary
@Bean
public Connection jmsConnection(ConnectionFactory connectionFactory) throws Exception
{
Connection connection = connectionFactory.createConnection();
connection.start();
return connection;
}
@Primary
@Bean
public Queue jmsQueue(Context context) throws Exception
{
Queue queue = (Queue) context.lookup("myqueue");
return queue;
}
}
应用属性
java.naming.factory.initial = org.apache.qpid.jndi.PropertiesFileInitialContextFactory
connectionfactory.qpidConnectionFactory = amqp://guest:guest@clientid/?brokerlist='tcp://localhost:5672?maxprefetch='0''
queue.myqueue = queue1
schduledTask.java它只是按间隔运行发送和接收消息。
@Component
public class ScheduledTasks
{
Connection connection;
Queue queue;
@Autowired
public ScheduledTasks(Connection connection, Queue queue) {
this.connection=connection;
this.queue=queue;
}
MessageListener messageListener = new MessageListener() {
@Override
public void onMessage(Message message) {
System.out.println("Received id is------>");
System.out.println(message);
}
};
@Scheduled(fixedDelay = 2000)
public void sendMessage() throws Exception
{
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
Message message=session.createTextMessage();
MessageProducer messageProducer=session.createProducer(queue);
message.setStringProperty("value", "BOOM");
messageProducer.send(message);
session.commit();
messageProducer.close();
//connection.close();
System.out.println("---------------Message Sent");
}
//@JmsListener(destination="queue1")
@Scheduled(initialDelay=5000, fixedDelay = 5000)
public void receiveMessage() throws Exception
{
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
MessageConsumer messageConsumer = session.createConsumer(queue);
// if(messageConsumer.getMessageListener()==null)
// messageConsumer.setMessageListener(messageListener);
Message message = messageConsumer.receive(3000);
if(message!=null)
System.out.println("----------------->"+message.getStringProperty("value"));
session.commit();
messageConsumer.close();
//connection.close();
System.out.println("--------------->Got Message");
}
}
您创建了一个实现MessageListener的实例,但没有对其执行任何操作。
在Spring中,您应该使用Spring jms中的DefaultMessageListenerContainer或SimpleMessageListenerContainer,并在JmsConfiguration类中将其创建为Spring Bean。在设置连接详细信息(ConnectionFactory、Queue、sessionTransacted等)之后,还需要设置JMS消息侦听器实现类。
版本 维特。x核心:3.5.0 vert. x redis客户端:3.5.0 上下文 2018-06-02 17:40:55.981错误4933---[ntlop-thread-2]io.vertx.redis.impl.重新连接:没有处理程序等待消息:14751915 2018-06-02 17:41:10.937错误4933---[ntloop-thread-2]io。维特斯。雷迪斯。impl
我正在构建一个应用程序,其中微服务通过RabbitMQ(请求-响应模式)进行通信 一切正常,但我仍然有一个错误“远程服务中没有定义匹配的消息处理程序。”- 当我向客户端应用程序发送帖子时,它只需通过客户端(ClientProxy)发送包含数据的消息,消费者应用程序就会响应。此功能实际上可以工作,但始终只能第二次使用。我知道这听起来很奇怪,但在我的第一个POST请求中,总是有来自客户的错误,我的每一
亲爱的史塔克弗劳尔, Swift/UIKit上的任何专家都可以在下面的屏幕截图中看到我做错了什么吗? Xcode似乎找不到基于标题、样式和处理程序的UIAlertAction的方便初始值设定项,我也不知道有任何其他方式来初始化UIAlertAction。实际上,处理器不会为零。 先谢谢你了, 杰米
问题内容: 我有一个注册了处理程序的库(通过),该处理程序在调用时不支持多个线程。就我而言,我不需要分叉的环境中使用,因为我要的是调用右后。所以,我想要但没有任何处理程序。那可能吗?我会错过任何重要的案例吗? 有关背景信息,该库为OpenBlas,此处和此处均描述了该问题。 问题答案: 您可以使用(NPTL实现不调用fork处理程序)。尽管POSIX已从标准中删除,但您的实现中可能会使用它。 当使
我正在使用netty构建一个应用程序。在应用程序中,我需要处理传入和传出的消息。要求是应用程序将发送的任何消息都应由特定的处理程序处理,进入应用程序的任何消息都应由另一个特定的处理程序处理。但是,我希望在两个处理程序之间交换消息,以便能够跟踪发送的消息响应,因为请求消息也将发送到应用程序。 请任何想法hwo实施这样的要求。这个问题听起来可能不相关,但这就是我得到的,我还不是一个网络极客。我读到的关
我怎么才能修好这个?