Rabbitmq,java生产者,c#消费者实现
Rabbitmq安装教程:
Java生产者实现:
首先引入jar包
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>3.5.3</version>
</dependency>
创建连接工厂CreateConnection.java:
import com.lin.common.rabbitmq.util.PropertiesUtil;
import com.rabbitmq.client.ConnectionFactory;
public class CreateConnection {
public static ConnectionFactory connectionFactory = new ConnectionFactory();
static {
connectionFactory.setHost("xx.xx.xx.xx");
connectionFactory.setPort(Integer.parseInt("5672"));
connectionFactory.setUsername("admin");
connectionFactory.setPassword("admin");
connectionFactory.setVirtualHost("/");
}
}
生产者:
import java.io.IOException;
import java.util.concurrent.TimeoutException;
import com.alibaba.fastjson.JSON;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
public class RabbitMqProducer {
public static <T> void sendEvent(String payload,T message)throws IOException, TimeoutException {
Connection connection = null;
Channel channel = null;
try {
connection = CreateConnection.connectionFactory.newConnection();
channel = connection.createChannel();
String str = beanToString(message);
//channel.queueDeclare(payload, false, false, false, null);
channel.basicPublish("", payload, null, str.getBytes());
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} finally {
close(channel,connection);
}
}
private static void close(Channel channel,Connection connection) throws IOException, TimeoutException {
if (channel != null) {
channel.close();
}
if (connection != null) {
connection.close();
}
}
public static <T> String beanToString(T value) {
if(value == null) {
return null;
}
Class<?> clazz = value.getClass();
if(clazz == int.class || clazz == Integer.class) {
return ""+value;
}else if(clazz == String.class) {
return (String)value;
}else if(clazz == long.class || clazz == Long.class) {
return ""+value;
}else {
return JSON.toJSONString(value);
}
}
}
c#消费者实现:
c#使用Rabbitmq,首先要下载RabbitMQ的Client端dll
下载地址:
解压后将RabbitMQ.Client.dll引用到c#项目中
c#消费者代码:
var factory = new ConnectionFactory();
factory.HostName = "xx.xx.xx.xx";
factory.Port = 5672;
factory.UserName = "admin";
factory.Password = "admin";
using (var connection = factory.CreateConnection())
{
using (var channel = connection.CreateModel())
{
channel.QueueDeclare("send_copy" + Global.Group, true, false, false, null);
var consumer = new EventingBasicConsumer(channel);
channel.BasicConsume("send_copy" + Global.Group, true, consumer); //只有运行这句话,队列才会创建
consumer.Received += (model, ea) =>
{
var body = ea.Body;
String message = Encoding.UTF8.GetString(body);
Console.WriteLine("已接收: {0}", message);
using (System.IO.StreamWriter file = new System.IO.StreamWriter("Config.txt", false))
{
file.WriteLine(message);
}
};
//TODO 这里得做些什么让此连接一直保持着
//比如在窗体应用程序中,保持using中的连接不关闭
//Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
}
}