Tag: rabbitmq

RabbitMQ Java客户端自动重新连接

当我的应用程序失去与RabbitMQ的连接时,我将其连接工厂设置为自动尝试重新连接 ConnectionFactory factory = new ConnectionFactory(); factory.setUsername(username); factory.setPassword(password); factory.setRequestedHeartbeat(1); factory.setConnectionTimeout(5000); factory.setAutomaticRecoveryEnabled(true); factory.setTopologyRecoveryEnabled(true); 当它试图重新连接它时,它一旦再次连接它就永远不会停止阻塞,我不确定为什么。 我使用的是最新版本的java客户端3.3.4 当我通过rabbitmq管理界面强制断开客户端连接时,似乎也会发生这种情况。 一些进一步的研究看起来像它正试图获得一个频道,但网络界面说有一个频道连接。

如何使用现有JMS应用程序中的RabbitMQ JMS客户端连接RabbitMQ?

我有一个通用的独立JMS应用程序,它与以下JMS提供程序WebSphere,HornetQ和ActiveMq一起使用。 我将Context.INITIAL_CONTEXT_FACTORY和Context.PROVIDER_URL作为参数传递给我的应用程序,并通过这样的操作创建一个命名上下文 Properties environmentParameters = new Properties(); environmentParameters.put(Context.INITIAL_CONTEXT_FACTORY, property.context); environmentParameters.put(Context.PROVIDER_URL, property.provider); namingContext = new InitialContext(environmentParameters); 并使用此上下文进行对象查找。 我理解RabbitMQ不是JMS提供者,因此它没有InitialContext类或Provider URL,但它提供了一个JMS Client,它是符合JMS规范的Java客户端的抽象。 RabbitMQ的JMS客户端文档有一个例子,它将JNDI中的对象定义为资源配置,作为Web应用程序的一部分,但我完全无法弄清楚如何为我的独立应用程序执行类似操作,该应用程序使用JMS基于JNDI提供程序创建命名上下文客户端的依赖关系或从可用的依赖关系中创建InitialContext。 那么有人可以说明如何做到这一点? 希望我的问题很清楚。

如何在Spring异步MessageListener用例中发生业务exception时请求RabbitMQ重试

我有一个Spring AMQP消息监听器正在运行。 public class ConsumerService implements MessageListener { @Autowired RabbitTemplate rabbitTemplate; @Override public void onMessage(Message message) { try { testService.process(message); //This process method can throw Business Exception } catch (BusinessException e) { //Here we can just log the exception. How the retry attempt is made? } catch (Exception e) { //Here we can just log […]

RabbitMQ:快速的生产者和缓慢的消费者

我有一个应用程序使用RabbitMQ作为消息队列在两个组件之间发送/接收消息:发送方和接收方。 发件人以非常快的方式发送消息。 接收器接收消息然后执行一些非常耗时的任务(主要是针对非常大的数据大小的数据库写入)。 由于接收器需要很长时间才能完成任务,然后检索队列中的下一条消息,因此发送方将继续快速填满队列。 所以我的问题是:这会导致消息队列溢出吗? 消息使用者如下所示: public void onMessage() throws IOException, InterruptedException { channel.exchangeDeclare(EXCHANGE_NAME, “fanout”); String queueName = channel.queueDeclare(“allDataCase”, true, false, false, null).getQueue(); channel.queueBind(queueName, EXCHANGE_NAME, “”); QueueingConsumer consumer = new QueueingConsumer(channel); channel.basicConsume(queueName, true, consumer); while (true) { QueueingConsumer.Delivery delivery = consumer.nextDelivery(); String message = new String(delivery.getBody()); System.out.println(” [x] Received ‘” + message + “‘”); JSONObject […]

使用Spring AMQP接收和发送Java对象

我想实现Spring AMQP示例,用于使用侦听器发送和接收Java对象。 我试过这个: 发送Java对象 ConnectionFactory connectionFactory = new CachingConnectionFactory(“localhost”); AmqpAdmin admin = new RabbitAdmin(connectionFactory); admin.declareBinding(BindingBuilder.bind(new Queue(QUEUE_PROCESSING_TRANSACTION, false)).to(new TopicExchange(EXCHANGE_PROCESSING)).with(ROUTING_KEY_PROCESSING_TRANSACTION)); AmqpTemplate template = new RabbitTemplate(connectionFactory); TransactionsBean obj = new TransactionsBean(); obj.setId(Long.valueOf(111222333)); 接收并发送回另一个Java对象: ConnectionFactory connectionFactory = new CachingConnectionFactory(“localhost”); AmqpAdmin admin = new RabbitAdmin(connectionFactory); admin.declareBinding(BindingBuilder.bind(new Queue(QUEUE_PROCESSING_TRANSACTION, false)) .to(new TopicExchange(EXCHANGE_PROCESSING)).with(ROUTING_KEY_PROCESSING_TRANSACTION)); AmqpTemplate template = new RabbitTemplate(connectionFactory); TransactionsBean obj = (TransactionsBean) template.receiveAndConvert(QUEUE_PROCESSING_TRANSACTION); […]

在Spring Integration中处理exception时遇到问题

我是Spring集成的新手,对于如何将错误消息发送到指定的错误队列感到困惑。 我希望错误消息是原始消息上的标头,并最终在一个单独的队列中。 我读到这可以通过标头扩充器来完成,我尝试实现但没有出现在错误队列中。 另外,我是否需要一个单独的exception处理类,以便将错误消息发送到错误队列,或者我可以在转换方法中抛出exception? 这是我的xml配置: 错误类: public class ErrorHandler { public String errorHandle(MessageHandlingException exception) { return exception.getMessage(); QualityScorer类(由变换器调用): public class QualityScorer { private Hashtable table; private final static String csvFile = “C:\\Users\\john\\Test.csv”; public QualityScorer() throws Exception { table = new Hashtable(); initializeTable(); } private void initializeTable() throws Exception { BufferedReader br = null; String line […]

Spring Amqp在springframework RetryCallback类中有NoClassDefFoundError

我一直在研究分布式Web项目,我想在其中使用带有RabbitMq的Spring amqp。 我在我的项目中使用springFramework版本4.1.6。 为此,我将以下依赖项添加到文件pom.xml中。 com.rabbitmq amqp-client 3.5.7 org.springframework.amqp spring-amqp 1.5.3.RELEASE org.springframework.amqp spring-rabbit 1.5.3.RELEASE 另外,我将下面的RabbitMQ配置文件放在web.xml中 此外,我写了一些方法来发送 @Service public class PrmSpringRabbitMessageSender { @Autowired private AmqpTemplate amqpTemplate; public void sendMessage(String queueName, String message) { amqpTemplate.convertAndSend(queueName, message); } } 并接收以下消息: @Component public class PrmSpringRabbitMessageReceiver { @RabbitListener(queues = “myQueue”) public void handleMessage(String data) { System.out.println(“Received Message : ” + data); […]

RabbitMQ使用者是否可以配置为仅使用相同消息的已定义尝试次数

RabbitMQ在某种程度上是否有用,我可以定义我的消费者,它有限制使用相同的消息。 即我的消费者用enqueue = true做一个基本的Reject。 并且它会无限地继续听同样的信息。 我不是在谈论队列方面的TTL。 但是对消费者的控制/配置告诉我只想消耗它5次,然后将其发送到另一个队列。 这可以实现吗?

我可以通过rabbitmq使用java发送任务芹菜吗?

我只是触摸芹菜和java 2天。 🙁 现在,我有一个java客户端通过rabbitmq发送任务的任务。 芹菜将成为处理任务的工人。 我知道Python-> rabbitmq->芹菜很容易。 但我可以通过java-> rabbitmq-> celery来做到这一点吗? 草案的想法是通过JSON序列化java函数然后由rabbitmq发送,然后由celery处理。 拥有示例代码更好,可以直接运行 谢谢

Spring云流 – 应用初始化后发送消息

我试图使用“spring cloud stream”向rabbitmq发送一条简单的消息。 基本上代码看起来像这样: @EnableBinding(Source.class) @SpringBootApplication public class SourceApplication { public static void main(String[] args) { SpringApplication.run(SourceApplication.class, args); } @Autowired Source source; @PostConstruct public void init() { source.send(MessageBuilder.withPayload(“payload”).build()); } } 然后我收到此错误消息: 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=******, headers={id=c60dd5be-6576-99d5-fd1b-b1cb94c191c1, timestamp=1488651422892}] at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:93) at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:423) […]