number007cool 2022-07-27 10:38 采纳率: 20%
浏览 14
已结题

C# 编写的activemq收发无法正常通信

C# 编写activemq 消费者和生产者,无法正常收发数据。 mq在pc上已经安装完成,并且可以网页登录。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Apache.NMS;
using Apache.NMS.ActiveMQ;
using System.Runtime.Serialization;

namespace actmq
{
public partial class Producer : Form
{
// 生产者
public Producer()
{
InitializeComponent();

        InitConsumer();

        InitProducer();  
    }

    private IConnectionFactory factoryProducer;

    private string strServer = "tcp://127.0.0.1:61616";

    public void InitProducer()
    {
        try
        {
            //初始化工厂,这里默认的URL是不需要修改的
            factoryProducer = new ConnectionFactory(strServer);
        }
        catch
        {
            lbMessage.Text = "初始化失败!!";
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        //通过工厂建立连接
        using (IConnection connection = factoryProducer.CreateConnection())
        {
            //通过连接创建Session会话
            using (ISession session = connection.CreateSession())
            {
                //通过会话创建生产者,方法里面new出来的是MQ中的Queue
                IMessageProducer prod = session.CreateProducer(new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("test"));

                //创建一个发送的消息对象
                ITextMessage message = prod.CreateTextMessage();
                //给这个对象赋实际的消息
                message.Text = "hello";
                //message.Properties.SetString("filter", "SwipeCard");

                //生产者把消息发送出去,几个枚举参数MsgDeliveryMode是否长链
                //MsgPriority消息优先级别,发送最小单位,当然还有其他重载
                prod.Send(message, MsgDeliveryMode.NonPersistent, MsgPriority.Normal, TimeSpan.MinValue);
                lbMessage.Text = "发送成功!!";
                txtMessage.Text = "";
                txtMessage.Focus();
            }
        }
    }
    IConnectionFactory factoryConsumer;
    IConnection connectionConsumer;
    public void InitConsumer()
    {
        //创建连接工厂
        factoryConsumer = new ConnectionFactory(strServer);
        //通过工厂构建连接
        connectionConsumer  = factoryConsumer.CreateConnection();
        //这个是连接的客户端名称标识
        connectionConsumer.ClientId = "zxc132423";
        //启动连接,监听的话要主动启动连接
        connectionConsumer.Start();

        //通过连接创建一个会话
        ISession session = connectionConsumer.CreateSession();
        //通过会话创建一个消费者,这里就是Queue这种会话类型的监听参数设置
        IMessageConsumer consumer = session.CreateConsumer(new Apache.NMS.ActiveMQ.Commands.ActiveMQTopic("test"), "filter='SwipeCard'");
        //注册监听事件
        consumer.Listener += new MessageListener(consumer_Listener);

        connectionConsumer.Start();
        //  connection.Stop();
        //  connection.Close();
    }

    void consumer_Listener(IMessage message)
    {

        ITextMessage msg = (ITextMessage)message;
        //tbReceiveMessage.Invoke(new DelegateRevMessage(RevMessage), msg);
        Console.WriteLine(msg.Text);

    }

    public delegate void DelegateRevMessage(ITextMessage message);

    public void RevMessage(ITextMessage message)
    {
        // tbReceiveMessage.Text += string.Format(@"接收到:{0}{1}", message.Text, Environment.NewLine);
        Console.WriteLine(message.Text);
    }

}//end class

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 8月4日
    • 创建了问题 7月27日

    悬赏问题

    • ¥100 iOS开发关于快捷指令截屏后如何将截屏(或从截屏中提取出的文本)回传给本应用并打开指定页面
    • ¥15 unity连接Sqlserver
    • ¥15 图中这种约束条件lingo该怎么表示出来
    • ¥15 VSCode里的Prettier如何实现等式赋值后的对齐效果?
    • ¥15 流式socket文件传输答疑
    • ¥20 keepalive配置业务服务双机单活的方法。业务服务一定是要双机单活的方式
    • ¥50 关于多次提交POST数据后,无法获取到POST数据参数的问题
    • ¥15 win10,这种情况怎么办
    • ¥15 如何在配置使用Prettier的VSCode中通过Better Align插件来对齐等式?(相关搜索:格式化)
    • ¥100 在连接内网VPN时,如何同时保持互联网连接