Spring boot 使用rabbitmq jms生成消息,并使用简单rabbitmq使用者使用该消息
我对jms还不熟悉, 我制作了一个rabbitmq jms producer项目,我正在其中生成消息。在这个项目中,我们使用了jmstemplate和rabbitmq队列(其中包含jms插件的rabbitmq) 在队列中生成消息之后,我希望使用不带jms的简单rabbitmq使用者来使用该消息 但是当我在我的消费者类中以字符串的形式获取这些消息时 该信息的格式如下: wx.com.rabbitmq.jms.client.message.RMQTextMessage$e529erb2a65-a5dc-4bd7-bfe0-4c09237696261frmq.jms.message.destinationsr%com.rabbitmq.jms.admin.RMQDestinationHٍ&)zamqpzisquezistetemporarylamqpechangenametljava/lang/String;L amqpQueueNameq~LamqpRoutingKeyq~ldestinitionnameq~xptjms.durable.queuesttestq~q~wrmq.jms.message.delivery.modermq.jms.message.timestamp[Yrmq.jms.message.priorityrmq.jms.message.expirationrmq.jms.message.id'id:E529512742424242A65-a9dc-43467-fge4-4c092d42761fw{name=abhijeet1} 最后,我得到了实际的消息,{name=abhijeet1} 我怎样才能得到真正的信息 是否可以使用rabbit jms生产者和消费者生成消息,而使用简单的rabbit mq消费者生成消息 如果可能怎么办 我的制作人是:Spring boot 使用rabbitmq jms生成消息,并使用简单rabbitmq使用者使用该消息,spring-boot,rabbitmq,jms,Spring Boot,Rabbitmq,Jms,我对jms还不熟悉, 我制作了一个rabbitmq jms producer项目,我正在其中生成消息。在这个项目中,我们使用了jmstemplate和rabbitmq队列(其中包含jms插件的rabbitmq) 在队列中生成消息之后,我希望使用不带jms的简单rabbitmq使用者来使用该消息 但是当我在我的消费者类中以字符串的形式获取这些消息时 该信息的格式如下: wx.com.rabbitmq.jms.client.message.RMQTextMessage$e529erb2a65-a5d
package com.rabbitmq.jms.producer;
import java.util.HashMap;
import java.util.Map;
import javax.jms.ConnectionFactory;
import javax.jms.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import com.rabbitmq.jms.admin.RMQConnectionFactory;
@SpringBootApplication
@EnableScheduling
public class RabbitmqJmsProducerApplication {
@Autowired
JmsTemplate jmsTemplate;
int i;
@Bean
ConnectionFactory connectionFactory() {
RMQConnectionFactory connectionFactory = new RMQConnectionFactory();
connectionFactory.setUsername("username");
connectionFactory.setPassword("password");
connectionFactory.setVirtualHost("**********");
connectionFactory.setHost("hostname");
return connectionFactory;
}
@Scheduled(fixedRate = 5000L) // every 5 seconds
public void publishQuote() {
i++;
MessageCreator messageCreator = (Session session) -> {
System.out.println("message sent " + "abhijeet " + i);
Map<String, String> map = new HashMap<>();
map.put("name", "abhijeet " + i);
return session.createTextMessage(map.toString());
};
jmsTemplate.send("test", messageCreator);
}
public static void main(String[] args) {
SpringApplication.run(RabbitmqJmsProducerApplication.class, args);
}
}
提前感谢。为了有效地帮助您,最好显示您的代码。好的,我现在添加了代码。
package com.rabbitmq.consumer;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
import com.rabbitmq.client.QueueingConsumer.Delivery;
public class MailConsumer implements Runnable {
private static boolean processMessges(Delivery delivery) throws Exception {
String msg = new String(delivery.getBody(), "UTF-8");
System.out.println("message is "+msg);
return true;
}
@Override
public void run() {
try {
ConnectionFactory factory = new ConnectionFactory();
factory.setUsername("username");
factory.setPassword("password");
factory.setVirtualHost("**********");
factory.setHost("hostname");
Connection connection;
connection = factory.newConnection();
Channel channel = connection.createChannel();
boolean removeAllUpTo = true;
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume("test", consumer);
while (true) {
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
if (delivery == null)
break;
if (processMessges(delivery)) {
try {
long deliveryTag = delivery.getEnvelope().getDeliveryTag();
channel.basicAck(deliveryTag, removeAllUpTo);
} catch (Exception exception) {
System.out.println("Connection was failed");
continue;
}
}
}
}
}
}
}