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
