1.首先查看阿里云的文档,把基本的配置和环境搭建完成。
https://help.aliyun.com/document_detail/114480.html?spm=a2c4g.11186623.6.614.6c884fddW4DLQz
2.阿里云的demo都是控制台程序的,相对于web版来说还是有一些出入。
3.因为资料不多,并且阿里云的demo版本有几种,加上阿里云回复速度并不理想,会花上比较长的时间。
刚开始一顿瞎抓,其实搞懂了很简单,代码也不多
下面把web版demo贴出来(TCP接入),注意TCP是内网,需要放服务器上进行测试
首先贴出生产的代码
private void product1(OrderProducer producer, Message msg, string shardingKey)
{
try
{
SendResultONS sendResult = producer.send(msg, shardingKey);
//Console.WriteLine("send success {0}", sendResult.getMessageId());
textarea1.Value += "send success " + sendResult.getMessageId() + "\r\n";
}
catch (Exception ex)
{
//Console.WriteLine("send failure{0}", ex.ToString());
textarea1.Value += "send fail " + ex.ToString() + "\r\n";
}
}
protected void Button2_Click(object sender, EventArgs e)
{
ONSFactoryProperty factoryInfo = factoryProperty();
// 创建生产者实例。
// 说明:生产者实例是线程安全的,可用于发送不同 Topic 的消息。基本上,您每一个线程只需要一个生产者实例。
OrderProducer producer = ONSFactory.getInstance().createOrderProducer(factoryInfo);
// 启动客户端实例。
producer.start();
// 创建消息对象。
//Message msg = new Message( factoryInfo.getPublishTopics(), tag, key, body);
Message msg = new Message(); //只要一个实例
string shardingKey = "App-Test";
for (int i = 0; i < 100; i++)
{
msg.setTopic(factoryInfo.getPublishTopics());
msg.setTag("mytag:"+i.ToString());
msg.setKey("mykey:" + i.ToString());
msg.setMsgBody("mybody:" + i.ToString());
//发送
product1(producer, msg, shardingKey);
}
// 在您的线程即将退出时,关闭生产者实例。
producer.shutdown();
}
private ONSFactoryProperty factoryProperty()
{
// 配置您的账号,以下设置均可从控制台获取。
ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
// AccessKeyId 阿里云身份验证,在阿里云用户信息管理控制台创建。
factoryInfo.setFactoryProperty(ONSFactoryProperty.AccessKey, "xx");
// AccessKeySecret 阿里云身份验证,在阿里云用户信息管理控制台创建。
factoryInfo.setFactoryProperty(ONSFactoryProperty.SecretKey, "xx");
// 您在控制台创建的 Group ID。---生产者
factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "xx");
// 您在控制台创建的 Group ID。---消费者
factoryInfo.setFactoryProperty(ONSFactoryProperty.ConsumerId, "xx");
// 您在控制台创建的 Topic。
factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "xxxt");
// 设置 TCP 接入域名,进入控制台的实例详情页面的 TCP 协议客户端接入点区域查看。
factoryInfo.setFactoryProperty(ONSFactoryProperty.NAMESRV_ADDR, "xxx");//注意是tcp接入还是http接入,公网、内网等
// 设置日志路径。
factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");
return factoryInfo;
}
接下来就是消费的代码,这里是随着网站启动的,如果不需要跟随网站启动消费,自行封装
public class Global : HttpApplication
{
ONSFactoryProperty factoryInfo;
// 创建消费者实例。
OrderConsumer consumer;
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
factoryInfo = factoryProperty();
consumer = ONSFactory.getInstance().createOrderConsumer(factoryInfo);
// 订阅 Topic。
MyMsgOrderListener myMsgOrder = new MyMsgOrderListener();
consumer.subscribe(factoryInfo.getPublishTopics(), "*", myMsgOrder);//这里这个“*”代表tag值,如果不指定tag值,默认会消费所有的消息
// 启动消费者实例。
consumer.start();
// 让主线程睡眠一段时间。
//Thread.Sleep(60000);//这里是给控制台使用,因为是web,如果不注释,网站会直接卡死
}
private ONSFactoryProperty factoryProperty()
{
// 配置您的账号,以下设置均可从控制台获取。
ONSFactoryProperty factoryInfo = new ONSFactoryProperty();
// AccessKeyId 阿里云身份验证,在阿里云用户信息管理控制台创建。
factoryInfo.setFactoryProperty(ONSFactoryProperty.AccessKey, "xx");
// AccessKeySecret 阿里云身份验证,在阿里云用户信息管理控制台创建。
factoryInfo.setFactoryProperty(ONSFactoryProperty.SecretKey, "xx");
// 您在控制台创建的 Group ID。---生产者
factoryInfo.setFactoryProperty(ONSFactoryProperty.ProducerId, "xx");
// 您在控制台创建的 Group ID。---消费者
factoryInfo.setFactoryProperty(ONSFactoryProperty.ConsumerId, "xx");
// 您在控制台创建的 Topic。
factoryInfo.setFactoryProperty(ONSFactoryProperty.PublishTopics, "xx");
// 设置 TCP 接入域名,进入控制台的实例详情页面的 TCP 协议客户端接入点区域查看。
factoryInfo.setFactoryProperty(ONSFactoryProperty.NAMESRV_ADDR, "xx");
// 设置日志路径。
factoryInfo.setFactoryProperty(ONSFactoryProperty.LogPath, "C://log");
return factoryInfo;
}
public void Application_End()
{
// 不再使用时,关闭消费者实例。
consumer.shutdown();
}
}
在web中,注意消费实例只能随着网站关闭而销毁,不然就监听不到入列的消息了
参考:https://blog.csdn.net/weixin_37207795/article/details/81023914
浙公网安备 33010602011771号